< COMMENTAIRE UNIQUEMENT DESTINE A PERMETTRE L'ACCES PAR 'vi' (introduit le 20061123090420). INITS: VAL 0 < INITIALISER LA ZONE SCRATCH DK. INITS: VAL 1 < NE PAS INITIALISER ZONE SCRATCH. IF TITV,X100,,X100 IDP "TV VERSION SOLAR - RELEASE 13/03/80" X100: VAL 0 IF TITV,,X100, IDP "TI VERSION SOLAR - RELEASE 13/03/80" X100: VAL 0 IDP "IMAGES VIDEOS" IDP "JOHN F. COLONNA" PAGE EOT #SIP DEFINITION CMS5# PAGE IF TITV,,XWOR%, NMPROC: VAL "TI" < NOM DU PROCESSEUR. XWOR%: VAL 0 IF TITV,XWOR%,,XWOR% NMPROC: VAL "TV" < NOM DU PROCESSEUR. XWOR%: VAL 0 EOT #SIP DEF PROCESSEUR# PROG WORD IMAGE < ENTRY POINT DU GENERATEUR. WORD 0 PIMAGE: EQU $ < P='12 !!! LRP L BR -2,L < ENTREE DANS LE PROCESSEUR 'TV'. < IF ORDI-"S",XWOR%,,XWOR% MCOOL: DZS 1 < CUMUL DES ARGUMENTS ENVOYES A CU3. XWOR%: VAL 0 < EOT #SIP DEFINITION ITEM# ITEM1: EQU ZERO+PILE-LTNI ITEM2: EQU ZERO+PILE-LTNI-LTNI PAGE < < < I M A G E S G R A P H I Q U E E T V I D E O : < SIZE: VAL ITEM2-ZERO < < PILE DU PROGRAMME : < SSTACK: VAL 40 < ELLE EST GRANDE A CAUSE DE < LA DICHOTOMIE... IF TITV,X100,,X100 STACK: EQU ZERO+SIZE < < BUFFER DE L'IMAGE GRAPHIQUE : < BUFFER: EQU STACK+SSTACK X100: VAL 0 EOT #SIP IMAGE 256# IF TITV,X100,,X100 NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO. IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO. X100: VAL 0 IF TITV,,X100, NOM: EQU ITEM1 < NOM EST EN RECOUVREMENT DE < L'EN-TETE DE L'ITEM1. IMAG: EQU ZERO+PILE+5 EOT: EQU IMAG-2 LONG: EQU IMAG-1 X100: VAL 0 IF ORDI-"S",XWOR%,,XWOR% ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (INTERPOLATION VIDEO < PAR CMS5). XWOR%: VAL 0 < < VALIDATION DU FORMAT DE L'IMAGE (CARREE) : < X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE. X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE. IF X20-X21,,X100, IF ATTENTION : L'IMAGE N'EST PAS CARREE !!! X100: VAL 0 IF TITV,X100,,X100 < < TAILLE MAX DE L'IMAGE GRAPHIQUE EN MOTS : < SIZEB: VAL NOM-BUFFER-2 < (-2 PAR PRUDENCE...) < < BUFFER DES SECTEURS SCRATCHES : < SECTOR: EQU BUFFER < ON L'IMPLANTE EN RECOUVREMENT < DU BUFFER DE LECTURE GRAPHIQUE. X100: VAL 0 PAGE < < < L O C A L : < < TABLE MCDAI: ASCI "!CDA" BYTE "I";'04 MCDA: ASCI "!CDA" BYTE '04;0 LOCAL LOC: EQU $ < < BUFFERS ET MESSAGES : < NPO: BYTE 5;"=" < POUR EDITION DU NBRE DE POINTS. REP: WORD 0 < REPONSE UTILISATEUR. WORD 0 < (ET FOND DE L'IMAGE) < (ET NBRE DE POINTS/IMAGE) CURSOR: DZS 3 < POUR ENTRER LE CURSEUR GRAPHIQUE: < OCTET0=CARACTERE DE DEBLOCAGE , < MOT1=Y(CURSEUR) , < MOT2=X(CURSEUR). IF TITV,X100,,X100 MNOM: BYTE 5;'6D ASCI "NOM>" MINT: BYTE 2;'6D;">";0 MFOND: BYTE 7;'6D ASCI "FOND= " ML1: BYTE 5;'6D ASCI "0-F=" ML2: BYTE 7;'6D ASCI "10-1F=" MIDEM: BYTE 7;'6D ASCI "T*T=I?" MAT: BYTE 2;'6D;"M";0 MX: BYTE 3;"2";"2";"=" BYTE 3;"2";"1";"=" BYTE 3;"1";"2";"=" BYTE 3;"1";"1";"=" BYTE 12;"-" < A T T E N T I O N : DOIT < ETRE DERRIERE LES 4 COEFFICIENTS < DE LA MATRICE 'T'. ASCI "CLASSE X,Y= " MDIAG: BYTE 5;'6D ASCI "1/2?" MTOPO: BYTE 34;'6D ASCI "0123456789ABCDEFGHIJKLMNOPQRSTUV" BYTE '6D;0 MORG: BYTE 5;'6D ASCI "ORG=" MINIT: BYTE 5;'6D ASCI "REC?" X100: VAL 0 IF TITV,,X100, MIT1: BYTE 7;'6D ASCI "!ITEM1" X100: VAL 0 MERR: BYTE 3;'6D;"?";"?" < < DEMANDES A CMS4 : < IF TITV,,X100, NSC: ASCI "SD " BYTE '04;0 < EOT DE FIN DE NOM. DELSC: WORD '0302 < DEMANDE DE DELETE SGN DE LA < BRANCHE DE SAUVEGARDE DE SC. WORD NSC-ZERO*2 WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 X100: VAL 0 DEMOUT: WORD '0202 < EMISSION D'UN MESSAGE. WORD 0 < @OCTET DU MESSAGE. WORD 0 < LONGUEUR DU MESSAGE. IF TITV,X100,,X100 DEMIN: WORD '0101 < LECTURE DU NOM DU DESSIN. WORD NOM-ZERO*2 WORD LNOM*2 DEMINT: WORD '0101 < LECTURE DE LA REPONSE UTILISATEUR. WORD REP-ZERO*2 WORD 1 < 1 CARACTERE. DEMFON: WORD '0101 < DEMANDE D'ENTREE DU FOND. WORD REP-ZERO*2 WORD 4 < 4 CARACTERES OBLIGATOIRES. LG: WORD '0A00 < LECTURE ALPHA SUR NVP='0A , < ASSIGNE A VI1. WORD BUFFER-ZERO*2 WORD SIZEB*2 X100: VAL 0 IF TITV,X100,,X100 OG: WORD '0203 < OPEN GRAPHIQUE DE LA VISU. CU: WORD '0106 < MISE EN FONCTION DU CURSEUR < GRAPHQIE. WORD 0 < IL FAUT : AMDEM=0 !!! LCU: WORD '0109 < LECTURE DU CURSEUR GRAPHIQUE. WORD CURSOR-ZERO*2 WORD 6 X100: VAL 0 IF TITV,,X100, OG: WORD '0B03 < OG SUR NVP='0B. CU: WORD '0B06 < CU SUR NVP='0B. WORD 0 < AMDEM DOIT ETRE NUL !!! LCU: WORD '0B09 < LCU SUR NVP='0B. WORD CURSOR-ZERO*2 WORD 6 X100: VAL 0 DEMMEM: WORD '0004 < DEMANDE D'ALLOCATION 8K-MOTS. RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS. WORD '4000 WORD '2000 < 8K OCTETS. DEMCCI: WORD '0001 < RETOUR AU CCI. SLEEP: WORD '0005 < DEMANDE DE TEMPORISATION. WORD 0 WORD 2 < POUR 2 SECONDES .... IF TITV,X100,,X100 SGN: WORD '0002 < DEMANDE D'ACCES AU SGN. WORD NOM-ZERO*2 < @OCTET DE L'IMAGE VIDEO. WORD LIMAG+LNOM+2*2 < LONGUEUR TOTALE DE L'IMAGE < VIDEO ET DE SON EN-TETE. WORD 2*LNOM X100: VAL 0 IF TITV,,X100, SGN: WORD '0002 < ACCES SGN POUR LES IMAGES. WORD NOM-ZERO*2 WORD IMAG-NOM+LIMAG*2 WORD EOT-NOM*2 X100: VAL 0 DEMSGN: WORD '0402 < DEMANDE D'ACCES AU SGN OVERLAY. WORD BRANCH-ZERO*2 < @OCTET DE LA BRANCHE. WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 RDK: WORD '0C00 < LECTURE SCRATCH DU DISQUE. IF TITV,X100,,X100 SECT2: WORD SECTOR-ZERO*2 < @OCTET DU SECTEUR. X100: VAL 0 IF TITV,,X100, SECT2: WORD ZSECT2 < @OCTET DU SECTEUR. X100: VAL 0 WORD 256 < 1 SECTEUR=256 OCTETS. WORD 0 < @SECTEUR COURANT. WDK: WORD '0C02 < ECRITURE SCRATCH DU DISQUE. IF TITV,X100,,X100 WORD SECTOR-ZERO*2 < PEUT CONTENIR UNE @ SE SITUANT < DANS L'IMAGE VIDEO. X100: VAL 0 IF TITV,,X100, WORD ZSECT2 X100: VAL 0 WORD 256 < 1 SECTEUR=256 OCTETS. WORD 0 < NUMERO DU SECTEUR COURANT. < < ACCES AU CCI INTERPRETATIF : < ACCI: WORD CCI < S/P D'ENVOI D'UNE CARTE AU 'CCI'... DEMCC: WORD '0002 < DEMANDE D'ACCES AU 'CCI' INTERPRETATIF. WORD 0 WORD 80 < < CONSTANTES DE CONVERSION GRAPHIQUE --> VIDEO : < IF TITV,X100,,X100 HY1: WORD 0 < HIGH-Y 1ER POINT. LY1: WORD 0 < LOW-Y 1ER POINT. HX1: WORD 0 < HIGH-X 1ER POINT. LX1: WORD 0 < LOW-X 1ER POINT. HY2: WORD 0 < HIGH-Y 2EME POINT. LY2: WORD 0 < LOW-Y 2EME POINT. HX2: WORD 0 < HIGH-X 2EME POINT. LX2: WORD 0 < LOW-X 2EME POINT. HY: WORD 0 < HIGH-Y POINT COURANT. LY: WORD 0 < LOW-Y POINT COURANT. HX: WORD 0 < HIGH-X POINT COURANT. LX: WORD 0 < LOW-X POINT COURANT. X100: VAL 0 X1: WORD 0 < X 1ER POINT. Y1: WORD 0 < X 1ER POINT. X2: WORD 0 < X 2EME POINT. Y2: WORD 0 < Y 2EME POINT. X: WORD 0 < X=(X1+X2)/2. Y: WORD 0 < Y=(Y1+Y2)/2. < < RELAIS DIVERS : < ASECT: WORD SECTOR-1,X < REALI DE RAZ DU BUFFER SECTEUR. AIMAG1: WORD IMAG,X < RELAI DE MODIF. DE L'IMAGE VIDEO. ASECT1: WORD SECTOR,X < RELAI POUR ACCES AU SECTEUR. AOP: WORD OP < ADRESSE D'1NE INSTRUCTION < VARIABLE CONTENANT SOIT UN < 'OR' , SOIT UN 'AND' , SOIT < ENFIN UN 'EOR'. AOP2: WORD OP2 < REALI VERS L'INSTRUCTION < VARIABLE DE CHOIX DES COULEURS < DE L'IMAGE VIDEO COURANTE... AREP: WORD REP,X < RELAI DE CONVERSION DU FOND. IF TITV,X100,,X100 AEOT: WORD NOM+LNOM < ADRESSE DE L'EOT A PRIORI. ALONG: WORD NOM+LNOM+1 < ADRESSE OU METTRE UN '0000 < PERMETTNAT DE DISTINGUER UNE < IMAGE VIDEO , D'UN DESSIN DE < SIMULATION FLOPPY ('DE'). X100: VAL 0 IF TITV,,X100, AEOT: WORD EOT < ADRESSE DE L'EOT A PRIORI. ALONG: WORD LONG < ADRESSE DE L'INDICATEUR VIDEO. X100: VAL 0 AI2: WORD ITEM2-1,X < RELAI VERS ITEM2-1 POUR RAZ. ABUF: WORD BUFFER,X < RELAI D'ACCES AU BUFFER CARACTERE AIMAG: WORD IMAG-1,X < RELAI D'ACCES A L'IMAGE-1. IF TITV,X100,,X100 AGET: WORD GET < RECUPERATION 1 CARACTERE. ACONV: WORD CONV < ROUTINE DE CONVERSION DES < CARACTERES DE COORDONNEES EN < COUPLES DE COORDONNEES Y,X. X100: VAL 0 IF TITV,,X100, ANOM: WORD NOM,X < RELAI D'ACCES AU NOM IMAGE. AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. AINOM: WORD INOM < RECUPERATION NOM DANS L'ITEM1. ASIMU: WORD SIMU < RECUPERATION CARACTERE DANS ITEM1 X100: VAL 0 APOINT: WORD SET < ROUTINE D'AFFICHAGE D'UN POINT : < CONTIENT SET/RESET/INVER SUIVANT < LE FOND DE L'IMAGE CHOISI. ASET: WORD SET < ROUTINE D'AFFICHAGE UN POINT. ARESET: WORD RESET < ROUTINE D'EFFACEMENT UN POINT. AINVER: WORD INVER < INVERSION VIDEO UN POINT. ATEST: WORD TEST < TEST D'1N POINT 0/1. LROUT: WORD $+3+1,X;SET;RESET;INVER AEXIST: WORD EXIST < EXISTENCE ET VALEUR D'UN POINT. AFILTR: WORD FILTR < MODULE DE FILTRAGE IMAGE. AVIRT: WORD VIRT < MODULE D'ENTREE TOPOGRAPHIE. ACOMPT: WORD COMPT < COMPTAGE DES POINTS/IMAGE. ADEF: WORD DEF < DEFINITION DE LA MATRICE DE < TRANSFORMATION. ACOEF: WORD COEF < ENTREE 1 COEEFICIENT MATRICE. IF ORDI-"T",XWOR%,,XWOR% ADICO: WORD DICO < PARCOURS DICHOTOMIQUE D'UN < SEGMENT. XWOR%: VAL 0 ASEG: WORD SEG < TRACE DU SEGMENT (M1,M2). AGOGE: WORD GOGE < MODULE DE RETOUR A 'GE'. AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE. ADESIR: WORD DESIR < QUESTION-REPONSE UTILISATEUR. AHEX: WORD HEX < CONVERSION HEXA --> BINAIRE. AGOSGN: WORD GOSGN < ROUTINE D'ACCES AU SGN. AE300: WORD E300 < INTERROGATION UTILISATEUR. AFIN: WORD E2 < ADRESSE DE FIN DE CONVERSION. AINTER: WORD E410 < 2EME NIVEAU D'INTERROGATION. AERR: WORD ERROR < ERREUR 2EME NIVEAU INTERRO. AE770: WORD E770 < INTERACTION GRAPHIQUE. AOPER: WORD OPER < OPERATION LOGIQUES IMAGES. AIMAG2: WORD IMAGE2 < ENTRY POUR CHANGEMENT DE NOM. IF ORDI-"T",XWOR%,,XWOR% ASP1: WORD SP1 < 1ERE ROUTINE MAITRE. ASP2: WORD SP2 < 2EME ROUTINE MAITRE. ASP3: WORD SP3 < MISE EN PLACE DE L'IMAGE COMME < ZONE VISUALISEE PAR LA VIDEO. < (SI =0 : CE N'EST PAS :SYS !!!) XWOR%: VAL 0 IF TITV,,X100, < < SAUVEGARDE/RESTAURATION DE L'EN-TETE ITEM1 : < I1: WORD ITEM1 < ADRESSE EN-TETE ITEM1. ASI1: WORD SI1 < ADRESSE ZONE DE SAUVEGARDE. SI1: DZS LNOM+2 < ZONE DE SAUVEGARDE. NOMARG: WORD -1 < MEMORISE DANS LE CAS D'UN APPEL < PAR 'SC', L'INDEX EVENTUEL DE < L'IMAGE APPELEE PRECEDEMMENT < PAR 'SC' LUI-MEME... X100: VAL 0 < < CONSTANTES : < KIN: WORD -2+TITV < COMPTEUR DES ENTRIES DANS TI/TV. IF TITV,X100,,X100 NGE: WORD "GE" < NOM DU PROCESSEUR 'GE'. X100: VAL 0 IF TITV,,X100, WHOCAL: WORD 0 < PERMET DE CONNAITRE LA NATURE < DE L'OVERLAY DE RETOUR SI ALT < MODE : < 0 : APPEL DIRECT PAR GE , OU < APPEL PAR SC , LUI MEME < AYANT ETE APPELE PAR GE , < 1 : APPEL PAR SC LUI-MEME AYANT < ETE APPELE PAR EI. NCALL: WORD $+1,X;"GE";"EI" X100: VAL 0 ACNSYS: ASCI ":SYS" < NUMERO DE COMPTE DU SYSTEME. IF TITV,,X100, NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES PAR ITEM. IEG: WORD 0 < INDEX COURANT DE L'ITEM1. X100: VAL 0 IF TITV,X100,,X100 NMOTS: WORD 2*LTNI < NBRE DE MOTS OCCUPES PAR < LES ITEMS 1 ET 2. X100: VAL 0 ALIMAG: WORD LIMAG < NBRE DE MOTS OCCUPES PAR L'IMAGE. NMPL: WORD CNMPL < NBRE DE MOTS DE 16 BITS/LIGNE. NLIG: WORD 1024/DY-1 < NBRE DE LIGNES D'UNE IMAGE -1. NPPL: WORD CNMPL*16-1 < NBRE DE POINTS/LIGNE-1. IF ORDI-"S",XWOR%,,XWOR% XWOR%1: VAL 4 XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% XWOR%1: VAL '400 XWOR%: VAL 0 TEMPO: WORD XWOR%1*2 < TEMPORISATION PAIRE DE CLIGNOT- < TEMENT DU PSEUDO-CURSEUR TV. WAITR: WORD 20000*TITV+'80 < NBRE DE JDX A FAIRE LORS DU < MASCAGE DES IT DE NIVEAU 7. INIT: WORD 0 < INDICATEUR D'INITIALISATION < DE L'IMAGE : < =0 : INITIALISER , < #0 : NE PAS INITIALISER. PATS: WORD 'FFFF;'FFFF < LISTE SUR 32 BITS DES SECTEURS < D'UNE IMAGE SCRATCH A PRENDRE < EN COMPTE (BIT=0 : SECTEUR < DE MEME RANG A IGNORER). MIROR: WORD 0 < =0 : MIROIR NORMAL LORS DES < OPERATIONS LOGIQUES , < #0 : &AS DE MIROIR. INDICS: WORD 0 < INDICATEUR TEMPORAIRE DE PRISE < EN COMPTE D'UN SECTEUR ; < =0 : IGNORER LE SECTEUR , < =1 : TRAITER LE SECTEUR COURANT. BANDE: WORD 0 < NUMERO DE LA BANDE COURANTE < QUE L'ON VIRTUALISE. ATOPO: WORD TOPO,X < RELAI VERS LA TOPOGRAPHIE < DES BANDES HORIZONTALES. TOPO: EQU $ BYTE 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15 BYTE 16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31 IF LIMAG/128-32,,X100, IF ATTENTION : LA TOPOGRAPHIE N'EST PAS ADAPTEE !!! X100: VAL 0 XIMAG: WORD 0 < INDEX DE MODIFICATION DE < L'IMAGE VIDEO. MASKX: WORD LIMAG-1 < MASQUE DE CALCUL DE XIMAG < MODULO LIMAG. SENSX: WORD 0 < CONTIENT L'INCREMENT (+1,-1) < DE XIMAG. SECTX: WORD 0 < DONNE L'INDEX INITIAL DE PARCOURS < D'UN SECTEUR D'IMAGE SCRATCH. < (0 OU 127). ITEST: WORD 0 < 0 : TEST SUR VALEUR 0 DES POINTS. < 1 : TEST SUR VALEUR 1 DES POINTS. IMAG2: WORD IMAG-ZERO*2 < @OCTET DE L'IMAGE VIDEO. < < MATRICE DE TRANSFORMATION : < (INITIALISEE SUR UNE TRANSPOSITION) < C256: WORD 256 < POUR DECONCATENER 2 OCTETS. XEQUIV: WORD 0 < CLASSE D'EQUIVALENCE DES X. YEQUIV: WORD 0 < CLASSE D'EQUIVALENCE DES Y. MSX: WORD 0 < SAVE TEMPORAIRE X DE M(X,Y). SX: WORD 0 < COORDONNEE REDUITE X TEMPORAIRE. RSX: WORD 0 < RESIDU DE X TEMPORAIRE. MSY: WORD 0 < SAVE TEMPORAIRE Y DE M(X,Y). SY: WORD 0 < COORDONNEE Y REDUITE TEMPORAIRE. RSY: WORD 0 < RESIDU DE Y TEMPORAIRE. AMAT: WORD $,X < LE RELAI AMAT DE LA MATRICE , < DOIT ETRE SUIVI DANS L'ORDRE < PAR A22,A21,A12,A11. A22: WORD 0 A21: WORD 1 A12: WORD 1 A11: WORD 0 SA22: WORD 0 < VALEUR TEMPORAIRE DE A22. SA21: WORD 0 < VALEUR TEMPORAIRE DE A21. DIAGON: WORD 1 < #0 : &ARCOURS DIAGONAL DE < L'IMAGE LORS DE 'T'. < =0 : PARCOURS ENTIER DE L'IMAGE. IF ORDI-"S",XWOR%,,XWOR% < < ACCES 'DKU' ET COULEURS SOLAR : < XALAD1: VAL '0E00 < PREMIER 16*Q-SECTEUR ACCESSIBLE, XALAD2: VAL '0F00 < PREMIER 16*Q-SECTEUR INACCESSIBLE, XDKU: VAL 4 < DECALAGE DE GENERATION ADRESSES DKU. RWDKU: WORD '8A00 < ACCES A 'DKU' SUR NVP='8A. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD XALAD1-1>XDKU < ADRESSE DE L'IMAGE EN ABSOLU. STDKU: WORD '8A01 < STABILISATION IMAGE. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD 0 < SELECTION COULEUR. AMCOOL: WORD MCOOL < ACCES AU CUMUL DES ARGUMENTS ENVOYES < A CU3 (COULEUR SOLAR). DEMCU3: WORD '8B02 < COMMANDE DES REGISTRES DE COULEUR. WORD MCOOL-ZERO*2 WORD 2 VALAD1: WORD XALAD1 < 'E000 : 1ER SECTEUR ACCESSIBLE, VALAD2: WORD XALAD2 < 'F000 : 1ER SECTEUR INACESSIBLE. M0FFF: WORD '0FFF < POUR RAZER LES BITS 0,1,2 ET 3. XWOR%: VAL 0 < < PILE DE TRAVAIL : < APILE: WORD PILE-1 < @PILE DE SODOME. ASTACK: WORD STACK-1 < PILE DE TRAVAIL DU PROCESSEUR. PROG PAGE < < < M I S E D ' U N B I T A 1 : < < < ARGUMENTS : < X ET Y CONTIENNENT X ET Y DU POINT. < C=@IMAG (IMAGE VIDEO). < < SET: EQU $ PSR B,X,C LR Y,A MP NMPL < CONVERSION DE L'Y DU POINT EN < UN NUMERO DE MOT. ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < CALCUL DE X MODULO 16 ; < X=NUMERO DU BIT DANS LE MOT. LA 0,C < A=MOT CONTENANT LE POINT (X,Y). SBT 0,X < POSITIONNEMENT DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < E F F A C E M E N T D ' U N P O I N T : < < < ARGUMENTS : < X ET Y CONTIENNENT X ET Y DU POINT. < C=@IMAG (IMAGE VIDEO). < < RESET: EQU $ PSR B,X,C LR Y,A MP NMPL ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU BIT REPRESENTANT < LE POINT DANS LE MOT ((C)). LA 0,C < A=MOT CONTENANT LE POINT (X,Y). RBT 0,X < EFFACEMENT DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < I N V E R S I O N V I D E O U N P O I N T : < < < ARGUMENT : < X ET Y CONTIENNENT X ET Y DU POINT A INVERSER. < C=@IMAG (IMAGE VIDEO). < < INVER: EQU $ PSR B,X,C LR Y,A MP NMPL ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU BIT REPRESENTANT < LE POINT DANS LE MOT ((C)). LA 0,C < A=MOT CONTENANT LE POINT (X,Y). IBT 0,X < INVERSION VIDEO DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < T E S T D ' U N P O I N T : < < < FONCTION DE ITEST : < ITEST=0 : CARY=1 SI POINT=0 , < =1 : CARY=1 SI POINT=1. < < < ARGUMENTS : < X ET Y CONTIENNENT L'X ET L'Y DU POINT , < C=@IMAG. < < < RESULTAT : < CARY POISITIONNE PAR LE POINT (0/1) 9 < < TEST: EQU $ PSR B,X,C LR Y,A < A=COORDONNEE Y DU POINT. MP NMPL ADR B,C LR X,A < A=COORDONNEE X DU POINT. SLRS 4 ADR A,C < C#MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU POINT DANS LE MOT (C) LA 0,C CPZ ITEST < TEST DE LA VALEUR LOGIQUE DU < POINT. JNE E1022 < CONVENTION NORMALE (1). IBT 0,X < CAS DES CONVENTIONS INVERSEES (1) E1022: EQU $ TBT 0,X < TEST DU POINT. PLR B,X,C RSR PAGE < < < E X I S T E N C E E T V A L E U R P O I N T : < < < ARGUMENT : < X ET Y CONTIENNENT L'X ET L'Y D'UN POINT. < < < RESULTAT : < A#0 : M(X,Y) N'EXISTE PAS , OU < M(X,Y) EXISTE ET M(X,Y)=0. < < < A T T E N T I O N : < LE TEST D'EXISTENCE NE PORTE QUE < SUR LA COORSONNEE Y DU POINT !!! < < EXIST: EQU $ LR Y,A JAL NEXIST < M(X,Y) N'EXISTE PAS : A<0#0 !!! CP NLIG JG NEXIST < M(X,Y) N'EXISTE PAS : A>0#0 !!! < < CAS OU LE POINT M(X,Y) EXISTE : < BSR ATEST < TEST DE LA VALEUR DE M(X,Y). LAI 1 SBCR A < A=0 SI M(X,Y)=1. NEXIST: EQU $ 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 IF TITV,,X100, < < < A C C E S C A R A C T E R E I T E M 1 : < < < ARGUMENT : < IEG=INDEX COURANT DE L'ITEM1. < < < A T T E N T I O N : < SI L'APPEL A EU LIEU PAR 'SC' , < IL EST POSSIBLE QUE L'ACCES A L'ITEM < AIT LIEU VERS L'ITEM2 , ET NON L'ITEM1 ; < TOUT DEPENDE DE CDRET. < < < RESULTAT : < A=CARACTERE COURANT DE L'ITEM1 , < IEG<--(IEG)+1 , < RETOUR DIRECT EN 'GOGE' SI DEBORDEMENT ITEM1 !!! < < SIMU: EQU $ PSR X LA IEG < A=INDEX COURANT DE L'ITEM1. CP NCP < VALIDATION DE (IEG). JGE SIMUR < ERREUR : HORS L'ITEM1 ... LR A,X < OK , X=INDEX COURANT DE L'ITEM1. LBY &AI1 < A=CARACTERE COURANT DE L'ITEM1. IC IEG < PROGRESSION DE IEG. PLR X RSR < < ERREUR : HORS L'ITEM1 : < SIMUR: EQU $ BR AGOGE < RETOUR DIRECT EN 'GOGE' !!! < < < A C C E S A U N O M D ' U N E I M A G E < D A N S L ' I T E M1 : < < < RESULTAT : < S'IL N'Y A PAS DE DEBORDEMENT DE L'ITEM1 , < 'NOM' RECOIT LE NOM RECUPERE DANS L'ITEM1 < A CONCURRENCE DE '2*LNOM' CARACTERES , < OU JUSQU'A TROUVER UN ';' , QUI EST ALORS < REMPLACE PAR UN 'EOT'. < < < A T T E N T I O N : < LE 'NOM' EST INCHANGE, SI LE < NOM CORANT RECUPERE EST VIDE (';'). < < INOM: EQU $ PSR X,Y < ON N'EST JAMAIS ASSEZ PRUDENT... LXI 2*LNOM < X=NBRE MAX DE CARACTERES. LYI 0 < INDEX COURANT DU NOM. < < BOUCLE DE RECUPERATION : < INOM1: EQU $ BSR ASIMU < A=CARACTERE COURANT DE ITEM1. CPI ";" < EST-CE LA FIN DE NOM ??? JNE INOM2 < NON , ON LE CONSERVE. CPZR Y < LE NOM RECUPERE EST-IL VIDE ??? JE INOM3 < OUI, 'NOM' RESTE ALORS INCHANGE. LAI '04 < OUI , ON LE REMPLACE PAR 'EOT' , LXI 1 < ET ON ARRETE ICI LA BOUCLE ... INOM2: EQU $ XR X,Y STBY &ANOM < RANGEMENT DE (A) DANS NOM. ADRI 1,X < PROGRESSION DE L'INDEX DE NOM. XR X,Y JDX INOM1 < SUITE EVENTUELLE DE LA BOUCLE < DE RECUPERATION ... INOM3: EQU $ < CAS DES NOMS VIDES. PLR X,Y RSR X100: VAL 0 PAGE IF ORDI-"T",XWOR%,,XWOR% EOT #SIP SP1# EOT #SIP SP3# EOT #SIP SP2# PAGE < < < E N R E G I S T R E M E N T V I D E O E X T E R N E : < < VIDEO: EQU $ IF TITV,X100,,X100 IC KIN < AFIN DE NE PAS PERDRE LA 1ERE < IMAGE QUE L'ON ENREGISTRE , AU < CAS OU 'V' EST LA 1ERE COMMANDE < UTILISEE. VIDEO1: EQU $ X100: VAL 0 LA ASP1 JAE E7000 < ON N'EST PAS SOUS :SYS !!! WORD '1EC5 < EN MODE MAITRE : < 0- MASCAGE DES IT DE NIVEAU 7 , < 1- INHIBITION DU ALT-MODE , < 2- BLOCAGE DU SWAPPING , < 3- MISE DE LA VIDEO EN LECTURE. IF TITV,,X100, LX WAITR JDX $ < ATTENTE DE FIN D'ENREGISTREMENT < VAEC LES IT7 MASQUEES ... X100: VAL 0 IF TITV,X100,,X100 LAI NSPTV SBT 0 WORD '1E15 < RECUPERATION DANS B DE L'@DCT < DU SYSTEME VIDEO. ADRI 2,B LR B,A < A=@REGISTRE X DU SYSTEME VIDEO. WORD '1E15 < RECUPERATION DANS B DU REGISTRE < X DU SYSTEME VIDEO. LR B,Y < Y=REGISTEE X DU SYSTEME < VIDEO APRES LA MISE EN RECORD. LX WAITR < INITIALISATION DU DETECTEUR DE < TIMED OUT DE LA VIDEO , OU DE SA < MISE 'OFF' !!! < < ATTENTE DE CHANGEMENT DE TRAME : < WIDEO: EQU $ JDX NTOUT < PAS OU PAS ENCORE DE TIMED OUT. JMP TOUT < CA Y EST : TIMED OUT !!! NTOUT: EQU $ < PAS OU PAS ENCORE DE TIMED OUT. WORD '1E15 < B=REGISTRE X COURANT DU < SYSTEME VIDEO. CPR B,Y < A-T'ON CHANGE DE TRAME ??? JE WIDEO < ON BOUCLE JUSQU'A CHANGER < DE TRAME !!! TOUT: EQU $ < TIMED OUT. X100: VAL 0 LA ASP2 WORD '1EC5 < EXECUTION MAITRE : < 1- RETOUR VIDEO EN ECRITURE , < 2- DEBLOCAGE DU SWAPPING , < 3- RE-AUTORISATION DU ALT-MODE. < 4- DEMASCAGE DES IT DE NIVEAU 7. LA ASET STA APOINT < ON SUPPOSE L'IMAGE EXTERNE < ENREGISTREE EN MODE 'SET'. IF TITV,,X100, BR AINTER < VERS LE 2EME NIVEAU < D'INTERROGATION. X100: VAL 0 IF TITV,X100,,X100 JMP VIDEO1 < ON RESTE DANS CETTE SEQUENCE < D'ENREGISTREMENT JUSQU'A CE < QU'UN ALT-MODE L'INTERROMPE !!! X100: VAL 0 XWOR%: VAL 0 PAGE < < < R E T O U R A ' G E ' : < < IF TITV,,X100, < CONDITIONS DE RETOUR : < CDRET=0 : RETOUR OK , < CDRET=2 : RETOUR SUITE A UN ALT-MODE. < < ABORT1: EQU $ < ERREUR TYPE ITEM1. LAD MIT1 BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR. < PUIS ABORT PAR 'ALTM' !!! ALTM: EQU $ < CAS D'UN ALT-MODE (PRESC). < < DELETE A PRIORI DE LA BRANCHE DE SAUVEGARDE : < (MEME S'IL NE S'AGIT PAS D'UN APPEL PAR SC) < WORD '1E45 < RENVOIE : A=<IDESC>. ADRI '30,A < CONVERSION ASCI DE L'<IDESC>. STBY NSC+2 < GENERATION DU NOM DE LA < BRANCHE DE SAUVEGARDE. LAD DELSC SVC 0 < DELETE LA BRANCHE 'SC <IDESC> '. < < PREPARATION DU RETOUR : < STZ MODCAL,W < AFIN DE FAIRE COMME SI L'APPEL < AVAIT EU LIEU PAR 'GE' , AFIN < DE RETOURNER A 'GE' ET NON A < 'SC' ... LAI 2 < A=CODE D'ERREUR (2). JMP GOBAC < VERS LE RETOUR A GE/EI. GOGE: EQU $ LAI 0 < A=CODE DE RETOUR OK (0). GOBAC: EQU $ STA CDRET,W < TRANSMISSION DES CONDITIONS < DE RETOUR PAR LE CDRET. X100: VAL 0 IF TITV,X100,,X100 GOGE: EQU $ LX NMOTS < X=NBRE DE MOTS A RAZER. E3000: EQU $ STZ &AI2 < RAZ DES ITEMS 1 ET 2. < (EN EFFET ON Y A MIS DES < COCHONNERIES...) JDX E3000 X100: VAL 0 LAI '06 < NVP DE LOAD SOUS :SYS. IF TITV,X100,,X100 LB NGE X100: VAL 0 IF TITV,,X100, LX WHOCAL < NATURE DE LA BRANCHE DE RETOUR. LB &NCALL < B=NOM DE LA BRANCHE DE RETOUR < A PRIORI ... (EN FAIT CE SERA < PEUT-ETRE LA BRANCHE SC ....) CPZ MODCAL,W < L'APPEL A-T'IL EU LIEU PAR < 'GE' OU BIEN PAR 'SC' ??? JE E4502 < APPEL PAR 'GE' ==> RETOUR A 'GE'. < < APPEL PAR 'SC' ==> RETOUR A 'SC' : < LA IEG < RECUPERATION DE L'2NDEX COURANT < DE SIMULATION CARACTERES. STA MODCAL,W < ET TRANSMISSION A 'SC'. WORD '1E45 < RECUPERATION : A=IDESC. ADRI '30,A < CONVERSION ASCI. STBY 2,W < ET MISE EN TETE DE BRANCH. LAI '05 < NVP DE LOAD SOUS ACN. LB NSC < LE NOM DE L'OVERLAY DE < RETOUR EST : < 'SC<SPACE><SPACE><IDESC><SPACE>' E4502: EQU $ X100: VAL 0 STB 0,W < MISE DU NOM (B) EN TETE < DE LA BRANCHE D'OVERLAY. STBY DEMSGN < DEMSGN EST MISE EN MODE < 'LOAD SOUS :SYS'. LA APILE LR A,K < REINITIALISATION DU REGISTRE < K AVEC LA PILE DE SODOME. IF TITV,,X100, < < INVALIDATION DE L'ITEM2 EN NE RAZANT QUE < SON EN-TETE (EN EFFET IL NE FAUT PAS LE < RAZER LUI-MEME CAR IL PEUT CONTENIR UNE < BIBLIOTHEQUE APPELEE PAR 'SC'...) : < LXI LTN < X=NBRE DE MOTS DE L'EN-TETE. RAZET: EQU $ STZ &AI2 JDX RAZET < < RESTAURATION DE L'EN-TETE DE L'ITEM1 : < LA ASI1 LB I1 LXI LNOM+1 MOVE CPZ MODCAL,W < RETEST DU MODE D'APPEL. JNE E101 < DANS LE CAS D'UN RETOUR A 'SC' < ON RESTE SUR 8K MOTS ... X100: VAL 0 LAD RELMEM SVC 0 < RETOUR A 4K MEMOIRE. E101: EQU $ LAI MCDA-ZERO BSR ACCI < RETOUR A 'CDA'... LAD DEMSGN BSR AOVL < TENTATIVE DE CHARGEMENT DE 'GE'. LAD DEMCCI SVC 0 < SI ERREUR , ON FAIT UN RETOUR AU < CCI ... JMP E101 < NOUVELLE TENTATIVE SI !GO. PAGE < < < G E N E R A T E U R S Y N T H E T I Q U E V I D E O : < < < PRINCIPE : IF TITV,X100,,X100 < SOIT VIX SUR LAQUELLE ON FAIT UN < DESSIN PAR G2/G3 ; SOIT DE PLUS !CM VIX=VI2 ; < VI2 ETANT UNE LIGNE REBOUCLEE SUR VI1 , TOUT < CARACTERE RECU PAR VIX ETANT DUPLIQUE SUR < VI2 (PAR !CM) EST RECU PAR VI1. < LE GENERATEUR SYNTHETIQUE FAIT SIMULTANEMENT < UNE LECTURE ALPHA-NUMERIQUE SUR VI1 ; AINSI TOUS < LES CARACTERES EMIS PAR L'INTERMEDIAIRE DE < G2/G3 SONT RECUS PAR LE GENERATEUR VIDEO ; < LORSQUE LE R/C DE FIN DE DESSIN (PRIMITIVE 'H' < DE G2/G3) EST RECU PAR LE GENERATEUR , IL < TRANSFORME LA CHAINE DE CARACTERES EN UNE < IMAGE VIDEO REPRSENTE EN MEMOIRE PAR < UNE MATRICE DE BITS. < DONC : < !CM VIX=VI2 < G2/G3 --> VIX < VI2 <--> VI1 < !ASSIGN A=VI1 < GENERATEUR VIDEO <-- VI1. X100: VAL 0 IF TITV,,X100, < CE PROCESSEUR PERMET A PARTIR DE < COMMANDES CONTENUS DANS L'ITEM1 DE < TRAVAILLER SUR DES IMAGES PRE-CONSTRUITES < OU PAS ... < SI MODCAL#0 : 'TI' EST EN FAIT APPELE < PAR 'SC' QUI LUI DEMANDE AINSI < D'INTERPRETER UNE PARTIE DE SES < COMMANDES. < MODCAL DONNE ALORS L'INDEX INITIAL < DE SIMULATION CARACTERES IEG. < LE BIT0 DE MODCAL INDIQUE ALORS LE < NOM DE L'APPELANT DE SC : 0 APPEL PAR GE , < 1 : APPEL PAR EI ... < < < ARGUMENTS : < MODCAL=INDEX CARACTERE COURANT , < BIT0=0 : RETOUR A GE SI ALT-MODE , < BIT0=1 : RETOUR A EI SI ALT-MODE. < CDRET=RELAI D'ACCES A L'ITEM COURANT. < B=INDEX DE L'IMAGE APPELEE EVENTUELLEMENT < PRECEDEMMENT PAR 'SC', LORS D'UN APPEL < PAR 'SC' (MODCAL#0). X100: VAL 0 < < < FORMAT D'UNE IMAGE VIDEO SOUS SGN : < MOTS0-9 : NOM DE L'IMAGE VIDEO , TERMINEE < PAR UN 'EOT' S'IL Y A MOINS DE 20 < CARACTERES) , < MOT10 : 'EOT;'00 , < MOT11 : -3 : IMAGE DIRECTE , < -2 : IMAGE INVERSEE , < -1 : IMAGE A FOND HACHURE , < ON PEUT AINSI DIFFERNCIER < UNE IMAGE VIDEO , D'UNE SIMULATION DE < FLOPPY , MAIS AUSSI POURSUIVRE < ULTERIEUREMENT LA MISE A JOUR D'UNE < IMAGE VIDEO ... < < < I N I T I A L I S A T I O N : < < WORD IMAG < VALEUR CONSTANTE DE LA BASE C. WORD LOC+'80 WORD BRANCH IMAGE: EQU $ LRP K ADRI -1,K PLR C,L,W < INITIALISATION DES 3 BASES. LA ASTACK LR A,K < INITIALISATION DE K. STZ INIT < A CAUSE DES ALT-MODES !!! IC KIN < COMPTAGE DES ENTRIES. IF TITV,,X100, JG ALTM < RETOUR A 'GE' DANS LE CAS D'UN < ALT-MODE (QUE L'APPEL AIT < EU LIEU PAR 'SC' OU PAR 'GE'). X100: VAL 0 IF TITV,X100,,X100 JE GOGE < CAS D'UNE 2EME ENTRY SANS QU'IL < Y AIT EU DE PASSAGE PREALABLE < A L'ADRESSE 'AINTER' (E2). JL INITV < CAS DE LA 1ERE ENTRY (INIT). BR AINTER < CAS DES ENTREES SECONDAIRES , < ALORS QU'UN PASSAGE EN E2 < AU MOINS A EU LIEU ... INITV: EQU $ X100: VAL 0 IF TITV,,X100, < < INITIALISATION DE IEG (INDEX DE SIMULATION) : < LA MODCAL,W < SI MODCAL#0 : L'APPEL A EU < LIEU PAR 'SC'. JAE PASC < CE N'EST PAS UN APPEL PAR 'SC'. STB NOMARG < DANS LE CAS D'UN APPEL PAR 'SC', < ON SAUVEGARDE L'INDEX DE DEBUT DU < NOM DE L'IMAGE APPELEE EVENTUEL- < LEMENT PRECEDEMMENT PAR 'SC'. PASC: EQU $ LBI 0 < POUR GE A PRIORI. TBT 0 RBT 0 < RAZ DU BIT0 A PRIORI. ADCR B < B=0 : RETOUR A GE , < B=1 : RETOUR A EI SI ALT-MODE. STB WHOCAL < SAVE LE NUMERO DE LA BRANCHE. STA IEG < MISE EN PLACE DE L'INDEX DE < SIMULATION CARACTERES. JAE E4510 < VERS L'ALLOCATION 8K MOTS. LA CDRET,W < (A)=RELAI VERS L'ITEM COURANT, < MAIS, EST-CE BIEN UN RELAI ??? JAGE ALTM < NON , EN FAIT , IL S'AGIT < D'UNE ENTREE FORT COMPLEXE < COINCIDANT AVEC UN ALT-MODE < FRAPPE PENDANT L'APPEL DE TI < PAR SC ...... STA AI1 < OK , CDRET CONTIENT LE < RELAI VERS L'ITEM COURANT. JMP E4500 < IL EST DE PLUS INUTILE DE < DEMANDER 8K , ON LES A DEJA ... < < VALIDATION DU TYPE DE L'ITEM1 : < E4510: EQU $ LXI IINDIC-LTN*2 < X=INDEX OCTET DU TYPE ITEM. LBY &AI1 < ACCES AU TYPE DE L'ITEM COURANT. CPI "T" < EST-CE UN TEXTE ??? JNE ABORT1 < ERREUR DE TYPE 'T' !!! X100: VAL 0 < < DEMANDE D'ALLOCATION 8K-MOTS : < LAD DEMMEM SVC 0 E4500: EQU $ < < PASSAGE SUR LA 'CDAI' : < (PERMETTANT DONC AINSI < L'ACCES A 'CDAJ' PAR < UTILISATION DE "!CDAI=J") < LAI MCDAI-ZERO BSR ACCI < ENVOI DE "!CDAI"... IF ORDI-"T",XWOR%,,XWOR% < < TEST DU NUMERO DE COMPTE D'APPEL : < WORD '1E25 < (A,B)=<ACN>. CP ACNSYS JNE E4000 < ON N'EST PAS SOUS :SYS !!! LR B,A CP ACNSYS+1 JE E4001 < ON EST SOUS :SYS !!! E4000: EQU $ < ON N'EST PAS SOUS :SYS. STZ ASP3 < PAS DE DEMANDE DE STABILISATION < DE L'2MAGE VIDEO. STZ ASP1 < L'ENREGISTREMENT EST IMPOSSIBLE. E4001: EQU $ < ON EST SOUS :SYS , YOUPI !!! XWOR%: VAL 0 IF TITV,,X100, < < SAUVEGARDE DE L'EN-TETE DE ITEM1 : < LB ASI1 LA I1 LXI LNOM+1 MOVE CPZ NOMARG < Y-A-T'IL UNE IMAGE PRECEDENTE ???? JL PASIMA < NON... < < MISE EN PLACE D'UN NOM INITIAL (CAS 'SC') : < LY IEG < SAVE IEG DANS Y. LA NOMARG STA IEG < ET ON FAIT CROIRE QUE L'INDEX < COURANT POINTE SUR LE NOM DE < L'IMAGE PRECEDENTE... BSR AINOM < RECUPERATION DU NOM DE L'IMAGE < PRECEDENTE. STY IEG < PUIS, ON RESTAURE IEG... PASIMA: EQU $ X100: VAL 0 IF INITS,X100,,X100 < < INITIALISATION DE LA ZONE SCRATCH DU DISQUE : < LXI 128 < X=128 MOTS=1 SECTEUR. E830: EQU $ STZ &ASECT < RAZ DU BUFFER SECTEUR COURANT. JDX E830 STZ WDK+3 < RAZ DU NUMERO DE SECTEUR. LXI LIMAG/128 < X=NBRE DE SECTEURS A INITIALISER. LAD WDK E831: EQU $ PSR X < SAVE LE DECOMPTE DES SECTEURS. SVC 0 < INIT. LE SECTEUR COURANT. PLR X IC WDK+3 < PASSAGE AU SECTEUR SUIVANT. JDX E831 < AU SUIVANT SI EXISTE ... X100: VAL 0 < < ENTREE DU NOM DE L'IMAGE : < IMAGE2: EQU $ < ENTRY POUR CHANGEMENT DE NOM. < (SUITE A UNE 2EME INTERRO- < GATION 'N'). IF TITV,X100,,X100 LAD MNOM BSR APRINT < ENVOI D'UN MESSAGE 'NOM>'. LAD DEMIN SVC 0 < ENTREE DU NOM DU DESSIN. X100: VAL 0 IF TITV,,X100, BSR AINOM < RECUPERATION DU NOM DE L'2MAGE. X100: VAL 0 LAI '04 STBY &AEOT < MISE D'UN 'EOT' A PRIORI < TOUT AU BOUT DU NOM. < (MEME S'IL Y EN A DEJA UN) ... < < INTERROGATION DE L'UTILISATEUR : < E300: EQU $ IF TITV,X100,,X100 LAD MINT X100: VAL 0 IF TITV,,X100, STZ OG < LORS DE CHAQUE COMMANDE PRIMAIRE, < ON INVALIDE AINSI LE CURSEUR < GRAPHIQUE DE '0B; CELUI-CI PEUT < ETRE REAUTORISEE PAR LA PRIMITIVE < 'G' A LA SUITE DE 'M' DANS < L'ITEM COURANT. X100: VAL 0 BSR ADESIR < QUESTION-REPONSE UTILISATEUR. < < REPONSES RECONNUES : < R : ENREGISTREMENT D'UNE IMAGE VIDEO (SUR NVP='0A), < A PARTIR D'UN DESSIN GRAPHIQUE (G2/G3) , < INITIALISATION DU FOND. < E : IDENTIQUE A 'R' , MIAS SANS INITIALISATION < DU FOND BIEN QU'IL SOIT DEMANDE POUR < INITIALISRR 'APOINT'. < RECUPERATION D'IMAGES PREEXISTANTES. < V : ENREGISTREMENT VIDEO EXTERNE , < D : AFFICHAGE D'UNE IMAGE VIDEO , IF TITV,,X100, < G : VALIDATION IMAGE SANS LOAD < DANS LE CAS DE L'APPEL PAR 'SC' , X100: VAL 0 < F : RETOUR A 'GE'. < IF ORDI-"T",XWOR%,,XWOR% CPI "V" JE VIDEO < ENREGISTREMENT A PARTIR D'1NE < SOURCE VIDEO EXTERNE. XWOR%: VAL 0 CPI "D" JE DESSIN < DEMANDE D'UNE IMAGE VIDEO. CPI "R" JE RECORD < ENREGISTREMENT D'UNE IMAGE. CPI "E" JE EDIT < PRISE EN COMPTE D'UNE IMAGE < PREEXISTANTE. CPI "F" JE GOGE < RETOUR A 'GE'. IF TITV,,X100, CPI "G" JNE E4501 < NON , COMMANDE NON RECONNUE ... CPZ MODCAL,W < DANS LE CAS DE 'G' , L'APPEL < A-T'IL EU LIEU PAR 'SC' ??? JNE E2 < OUI , 'G' EST AUTORISEE. E4501: EQU $ < ERREUR DE COMMANDE. X100: VAL 0 < < ERREUR : < E7000: EQU $ LAD MERR BSR APRINT < REPONSE INCOMPREHENSIBLE ... JMP E300 < VERS UNE NOUVELLE INTERROGATION. PAGE < < < I M A G E P R E E X I S T A N T E : < < EDIT: EQU $ IC INIT < INIT#0 : DONC PAS D'ECRASEMENT < DE L'IMAGE PREEXISTANTE PAR < LE FOND !!! < < < E N R E G I S T R E M E N T D ' U N E I M A G E : < < RECORD: EQU $ < < CHOIX DU FOND DE L'IMAGE : < IF TITV,X100,,X100 LAD MFOND BSR APRINT < ENVOI D'UN MESSAGE 'FOND= '. LAD DEMFON SVC 0 < LECTURE DU FOND SOUS FORME DE < 4 CARACTERES HEXADECIMAUX. X100: VAL 0 < < CONVERSION HEXADECIMALE --> BINAIRE : < LYI 4 < Y=NBRE DE CARACTERES ATTENDUS. BSR AHEX JNE RECORD < ERREUR DE CARACTERES ... < < CHOIX DE LA ROUTINE D'AFFICHAGE DES POINTS : < LB ASET < SET A PRIORI. JAE E52 < EFFECTIVEMENT LE FOND EST NOIR. LB ARESET < RESET A PRIORI. CPI -1 JE E52 < EFFECTIVEMENT , LE FOND EST BLAN. LB AINVER < ET BIEN ON FERA DE L'INVERSION. E52: EQU $ STB APOINT < MISE EN PLACE DU RELAI D'ACCES < A LA ROUTINE D'AFFICHAGE CHOISIE. < < INITIALISATION DE L'IMAGE : < CLEAR: EQU $ CPZ INIT < DOIT-ON INITIALISER LE FOND ??? STZ INIT < REINITIALISATION INIT A PRIORI. JNE E400 < NON , PAS D'INITIALISATION ; < C'EST UN CHANGEMENT DE NOM. LX ALIMAG E1: EQU $ STA &AIMAG < INITIALISATION DE L'IMAGE. JDX E1 < < E N R E G I S T R E M E N T G R A P H I Q U E : < E400: EQU $ < ENREGISTREMENT DE LA SUITE < D'UN DESSIN GRAPHIQUE. IF ORDI-"T",XWOR%,,XWOR% IF TITV,,X100, JMP E2 < VERS LE 2EME NIVEAU D'INTERRO. X100: VAL 0 IF TITV,X100,,X100 LAD MINIT < DEMANDE ENREGISTREMENT ???O/N. BSR ADESIR < QUESTION-REPONSE UTILISATEUR. CPI "N" JE E2 < NON : PAS D'ENREGISTREMENT , ON < VA DIRECTEMENT AU 2EME NIVEAU < D'INTERROGATION. CPI "O" JE E470 < OUI : VERS LA LECTURE SUR < LE NVP='0B. LAD MERR BSR APRINT < REPONSE INCOMPREHENSIBLE... JMP E400 < NOUVELLE INTERROGATION. E470: EQU $ LAD LG SVC 0 < LECTURE SUR LE NVP='0A. JE E847 < OK. < < CAS OU LE NVP='0A N'EST PAS ASSIGNE : < LAD DEMCCI SVC 0 < ON FAIT UN RETOUR PROVISOIRE < AU CCI POUR !ASSIGN. JMP E400 < ET ON RECOMMENCE AU !GO. < < C O N V E R S I O N G R A P H I Q U E --> V I D E O : < E847: EQU $ LXI 0 < INDEX GRAPHIQUE. < < BOUCLE PRIMAIRE DE RECUPERATION GRAPHIQUE : < E10: EQU $ BSR AGET < A=CARACTERE COURANT. CPI '1D < EST-CE UN 'GS' ??? JNE E10 < NON , IGNORE. < < CAS D'UN 'GS' : DEBUT D'UNE CHAINE GRAPHIQUE : < E11: EQU $ BSR AGET < A=CARACTERE COURANT. CPI '20 < EST-CE UN CTRL-XXX ??? JL E11 < OUI , IL EST IGNORE. < < CAS DU 1ER POINT D'UNE CHAINE GRAPHIQUE : < E12: EQU $ STA HY1 < HIGH-Y 1ER POINT. BSR AGET STA LY1 < LOW-Y 1ER POINT. BSR AGET STA HX1 < HIGH-X 1ER POINT. BSR AGET STA LX1 < LOW-X 1ER POINT. < < CARACTERES SUIVANTS LE 1ER POINT : < E18: EQU $ BSR AGET < A=CARACTERE COURANT. CPI '1F < EST-CE UN 'US' ??? JL E11 < NON UN CTRL-XXX IGNORE , ON < VA DE PLUS CHANGER DE 1ER POINT. JE E10 < OUI , ON RETOURNE A LA BOUCLE < PRIMAIRE DE RECUPERATION , < JUSQU'A TROUVER UN NOUVEAU 'GS'. < < RECUPERATION DU 2EME POINT : < STA HY2 < HIGH-Y 2EME POINT. BSR AGET STA LY2 < LOW-Y 2EME POINT. BSR AGET STA HX2 < HIGH-X 2EME POINT. BSR AGET STA LX2 < LOW-X 2EME POINT. < < C O O R D O N N E E S X E T Y D E S < P O I N T S 1 E T 2 : < PSR X < SAVE L'INDEX GRAPHIQUE. LAD HY LR A,B < RECEPTEUR=#HY. LAD HY1 < EMETTEUR=@HY1. LXI 4 MOVE < POINT COURANT=1ER POINT. BSR ACONV < CALCUL DES COORDONNEES X,Y. STX X1 < X 1ER POINT. STY Y1 < Y 1ER POINT. LAD HY LR A,B < RECEPTEUR=@HY. LAD HY2 < EMETTEUR=@HY2. LXI 4 MOVE < POINT COURANT=2EME POINT. BSR ACONV < CALCUL DES COORDONNEES X,Y < DU 2EME POINT. STX X2 < X 2EME POINT. STY Y2 < Y 2EME POINT. LAD HY1 LR A,B < RECEPTEUR=1ER POINT. LAD HY2 < EMETTEUR=2EME POINT. LXI 4 MOVE < LE 1ER POINT EST ECRASE PAR < LE 2EME POINT , AFIN DE PRENDRE < EN COMPTE LES CHAINAGES DE < SEGMENTS. BSR ASEG < TRACE DU SEGMENT (M1,M2). < < < PLR X < RESTAURE L'INDEX GRAPHIQUE. JMP E18 < VERS LA RECHERCHE DU NOUVEAU < 2EME POINT. X100: VAL 0 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% IF TITV,X100,,X100 LAD MINIT BSR ADESIR < CA NE SERT A RIEN, MAIS POUR LA < COMPATIBILITE... X100: VAL 0 JMP E2 < VERS LE 2EME NIVEAU D'INTERRO... XWOR%: VAL 0 < < < C O M P T A G E D E S P O I N T S / I M A G E : < < EE15: EQU $ BR ACOMPT < VERS LE MODULE SPECIFIQUE. < < E R R E U R : < E102: EQU $ LAD MERR BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR. BR AIMAG2 < VERS UNE REINITIALISATION DE TV. PAGE < < L I S T E D E S S E C T E U R S A T R A I T E R : < < FONCTION : < CE MODULE PERMET DE RECUPERER < 8 CARACTERES HEXAS ; CHAQUE BIT < CORRESPONADANT A 1 SECTEUR D'1NE < IMAGE SCRATCH ; UN BIT A 0 < INDIQUE QU'IL FAUT IGNOERER CE < SECTEUR LORS DES OPERATIONS LOGIQUES < ENTRE IMAGES .... < E2101: EQU $ IF TITV,X100,,X100 LAD ML1 BSR APRINT < ENVOI D'UNE INVITATION. LAD DEMFON SVC 0 < ENTREE DE CARACTERES CORRESPON- < DANT AUX SECTEURS 0 A 'F. X100: VAL 0 LYI 4 < Y=4 CARACTERES A DECODER. BSR AHEX < CONVERSION HEXA --> BINAIRE. JNE E2101 < ERREUR DE SYNTAXE. STA PATS < MEMORISATION DES SECTEURS 0 A 'F. E2102: EQU $ IF TITV,X100,,X100 LAD ML2 BSR APRINT < ENVOI D'1NE INVITATION. LAD DEMFON SVC 0 < ENTREE DE 4 CARACTERES CORRES- < PONDANT AUX SECTEURS '10-'1F. X100: VAL 0 BSR AHEX < CONVERSION HEXA --> BINAIRE < DES SECTEURS '10 A '1F. JNE E2102 < ERREUR DE SYNTAXE. STA PATS+1 < MEMORISATION SECTEURS '10-'1F. JMP E410 < VERS L'2NTERROGATION. < < R E T O U R T E M P O R A I R E A U C C I : < E2700: EQU $ LAD DEMCCI SVC 0 JMP E410 < VERS L'INTERROGATION SI !GO. < < D E F I N I T I O N D E L A M A T R I C E < D E T R A N S F O R M A T I O N : < E2800: EQU $ BR ADEF < VERS LE MODULE SPECIFIQUE. < < < R E C H E R C H E I M A G E V I D E O : < < DESSIN: EQU $ LAI '05 BSR AGOSGN < TENTATIVE DE CHARGEMENT. JE E350 < OK , CHARGEMENT REUSSI. LAI '06 BSR AGOSGN < SINON TENTATIVE DE CHARGEMENT < SOUS :SYS. JNE E102 < ET NON , L'IMAGE N'EXISTE PAS !!! E350: EQU $ LA &ALONG < VALIDATION DE L'IMAGE CHARGEE. JAGE E102 < ERREUR : IL S'AGIT D'UNE < SIMULATION DE FLOPPY. CPI -3 JL E102 < IL S'AGIT DE QUELQUE CHOISE... LR A,X < OK , X=INDEX DE RECUPERATION. LA &LROUT < SI <0 , C'EST UN INDEX DE < RECUPERATION DE LA ROUTINE < D'AFFICHAGE DES POINTS. STA APOINT < CE QUI NOUS DONNE L'ADRESSE < DE LA ROUTINE SET/RESET/INVER. < < < F I N D E C O N V E R S I O N : < < E2: EQU $ < < INTERROGATION UTILISATEUR : < E410: EQU $ IF TITV,X100,,X100 IC KIN < MEMORISATION QU'IL Y A EU AU < MOINS UN PASSAGE PAR ICI ... LAD MINT X100: VAL 0 BSR ADESIR < QUESTION-REPONSE UTILISATEUR. < < REPONSES RECONNUES : < D : ON RESTE SUR L'INTERROGATION (PERMET DONC < DE RAFRAICHIR L'IMAGE VIDEO...) , < DE PLUS EDITE LE NBRE DE POINTS DE L'IMAGE < COURANTE... < G : VERS UNE REINITIALISATION ENTIERE , < (SAUF DE L'IMAGE SCRATCH !!!) < S : SAVE L'IMAGE COURANTE EN SCRATCH , < L : ENTREE DE LA LISTE DES SECTEURS D'1NE < IMAGE SCRATCH A PRENDRE EN COMPTE , < O : 'OR' ENTRE L'IMAGE COURANTE ET L'IMAGE SCRATCH, < A : DE MEME AVEC 'AND' , < E : DE MEME AVEC 'EOR' , < H : DE MEME AVEC 'AD' ('HADDITION'...) , < Z : DE MEME AVEC 'SB' ('ZOUSTRACTION'....) < U : IMAGE-COURANTE <-- IMAGE-SRACTCH , < N : PERMET UN 2EME ENTRY DANS TV , AFIN < DE POUVOIR FAIRE DES CHANGEMENTS DE NOM , < ET DES SUPERPOSITIONS ,... < I : INVERSION VIDEO DE L'IMAGE , < P : FILTRAGE D'UNE IMAGE , < C : PSEUDO-COLORIAGE DE L'IMAGE , < T : TRANSPOSITION DE L'IMAGE , < = : DEFINITION DE LA MATRICE DE TRANSFORMATION , < V : ENTREE DE LA VIRTUALISATION DE L'2MAGE , < M : MODIFICATION INTERACTIVE DE L'IMAGE VIDEO < PAR LE CURSEUR GRAPHIQUE DE LA VISU , < - : DELETE L'IMAGE VIDEO SOUS SGN , < + INSERT L'IMAGE VIDEO SOUS SGN , < F : RETOUR A GE SANS RIEN FAIRE D'AUTRE , < W : RETOUR TEMPORAIRE AU CCI , < R : DEMANDE D'UNE SUITE GRAPHIQUE AU DESSIN (VI1). < CPI "R" JE E400 < VERS L'ENREGISTREMENT DE LA < SUITE GRAPHIQUE DE L'IMAGE VIDEO. CPI "V" JE E2400 < VIRTUALISATION DE L'IMAGE. CPI "L" JE E2101 < ENTREE LISTE DES SECTEURS. CPI "D" JE EE15 < EDITION DU NBRE DE POINTS. CPI "F" JE E420 < VERS UN RETOUR IMMEDIAT A 'GE'. CPI "W" JE E2700 < DEMANDE DE RETOUR AU CCI. CPI "-" JE E430 < VERS UN DELETE-SGN DE L'IMAGE. CPI "+" JE E440 < VERS UN STORE SGN DE L'IMAGE. CPI "=" JE E2800 < DEFINITION DE LA MATRICE. CPI "I" JE E870 < INVERSION VIDEO DE L'IMAGE. CPI "P" JE E2000 < DEMANDE DE FILTRAGE D'UNE IMAGE. CPI "C" JE E2010 < PSEUDO-COLORIAGE DE L'IMAGE. CPI "T" JE E2020 < TRANSPOSITION DE L'IMAGE. CPI "M" JE E790 < MODIFICATION INTERACTIVE DE < L'IMAGE VIDEO. CPI "N" JE E860 < 2EME ENTRY DANS LE PROCESSEUR. CPI "O" JE E842 < OR(IMAGE COURANTE,IMAGE SCRACTH). CPI "A" JE E843 < AND(IMAGE COURANTE,IMAGE SCRATCH) CPI "E" JE E844 < EOR(IMAGE COURANTE,IMAGE SCRATCH) CPI "H" JE E2550 < AD(IMAGE SCRATCH,IMAGE COURANTE). CPI "Z" JE E2551 < SB(IMAGE COURANTE,IMAGE SCRATCH). CPI "U" JE E2500 < RAPPEL DE L'IMAGE SCRATCH. CPI "S" JE E834 < SAVE L'IMAGE COURANTE EN SCRATCH. CPI "G" JE E833 < REINITIALISATION DE 'TV' , < SAUF DE LA ZONE SCRATCH !!! IF ORDI-"S",XWOR%,,XWOR% ADRI -"0",A < TEST DES FONCTIONS INDICATEUR TV. JAL ERROR CPI 7 < DOIT ETRE ENTRE 0 ET 7. JG ERROR XWOR%1: VAL TVSIMU=0 < DECALAGE DES INDICATEURS. IF XWOR%1,,X100, < A APPLIQUER SI DIFFERENT DE ZERO. SLLS XWOR%1 X100: VAL 0 TBT 13 < 0/1/2/3 OU 4/5/6/7 ??? RBT 13 < RAZ A PRIORI... LR A,B < SAVE DANS B LA COULEUR... JNC TVCOL1 < 0/1/2/3. XWOR%1: VAL TVIN=0 XWOR%1: VAL NBITMO-1-XWOR%1 SBT XWOR%1 < 4/5/6/7. TVCOL1: EQU $ STA STDKU+3 < STORE DES INDICATEURS. LAD STDKU < STABILISATION DE L'IMAGE SVC 0 < SI ON EST SOUS :SYS STB STDKU+3 < RAZ LE BIT IN A PRIORI... JMP E410 < VERS UNE NOUVELLE INTERROGATION. XWOR%: VAL 0 ERROR: EQU $ < ERREUR 2EME NIVEAU INTERRO. LAD MERR BSR APRINT < REPONSE INCOMPREHENSIBLE ?? JMP E410 < VERS UNE NOUVELLE INTERROGATION. < < C H A N G E M E N T D E N O M : < E860: EQU $ IC INIT < INIT#0 : AINSI ON NE REINITIA- < LISERA PAS LE FOND DE L'IMAGE ... < < R E I N I T I A L I S A T I O N G E N E R A L E , < S A U F L ' I M A G E S C R A T C H : < E833: EQU $ BR AIMAG2 < VERS UNE 2EME ENTRY ... < < V I R T U A L I S A T I O N D E L ' I M A G E : < E2400: EQU $ BR AVIRT < VERS LE MODULE SPECIFIQUE. < < F I L T R A G E I M A G E : < E2000: EQU $ LBI 0 < B=0 : DEMANDE DE FILTRAGE. BR AFILTR < VERS LE MODULE DE FILTRAGE. < < P S E U D O - C O L O R I A G E : < E2010: EQU $ LBI 1 < B=1 : PSEUDO-COLORIAGE IMAGE. BR AFILTR < < T R A N S P O S I T I O N D E L ' I M A G E : < E2020: EQU $ LBI -1 < B=-1 : DEMANDE DE TRANSPOSITION. BR AFILTR < < I N V E R S I O N V I D E O D E L ' I M A G E : < E870: EQU $ LX ALIMAG < X=NBRE DE MOTS DE L'IMAGE. E450: EQU $ LA &AIMAG < A=1 MOT DE L'IMAGE. EORI -1 < INVERSION BIT A BIT DE L'IMAGE. STA &AIMAG < ET MISE A JOUR DE L'IMAGE. JDX E450 < AU MOT SUIVANT. LA APOINT < ACCES A LA ROUTINE COURANTE. LB ARESET < SET COURANT A PRIORI. CP ASET < EST-CE SET ??? JE E451 < OUI , ON PASSE DONC EN RESET. CP ARESET < EST-CE RESET ??? JNE E410 < NON , INVER QUE L'ON LAISSE < TELLE QU'ELLE EST ... LB ASET < ET OUI , ON PASSE DONC EN SET. E451: EQU $ STB APOINT < MISE EN PLACE DE LA NOUVELLE < ROUTINE SET/RESET/INVER. JMP E410 < PUIS ENFIN VERS L'INTERROGATION. < < D E L E T E - S G N D E L ' I M A G E : < E430: EQU $ LAI '03 BSR AGOSGN < ESSAI DE DELETE SGN. E102J: JNE E102 < ERREUR : LE NOM N'EXISTE PAS ... JMP E410 < VERS LA DEMANDE DES DESIRS < DE L'UTILISATEUR .... < < S T O R E - S G N D E L ' I M A G E : < E440: EQU $ LA APOINT < RECUPERATION DE L'ADRESSE DE < LA ROUTINE SET/RESET/INVER. LBI -3 < SET A PRIORI. CP ASET JE E960 < EFFECTIVEMENT C'EST SET. LBI -2 < RESET A PRIORI. CP ARESET JE E960 < EFFECTIVEMENT C'EST RESET. LBI -1 < ET BIEN NON , C'EST INVERS. E960: EQU $ STB &ALONG < MAJ DE LA LONGUEUR (?) , POUR < DISTINGUER UNE IMAGE VIDEO < D'UNE IMAGE DE SIMULATION FLOPPY. LAI '03 BSR AGOSGN < TENTATIVE DE DELETE PRELIMINAIRE. LAI '04 BSR AGOSGN < TENTATIVE DE STORE. IF ORDI-"T",XWOR%,,XWOR% JNE E102 < ERREUR DE STORE ... XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JNE E102J < ERREUR DE STORE ... XWOR%: VAL 0 JMP E410 < VERS LA DEMANDE DES DESIRS < DE L'UTILISATEUR. < < R E T O U R A ' G E ' : < E420: EQU $ BR AGOGE < AIN'T IT HARD ??? < < S A V E L ' I M A G E C O U R A N T E E N S C R A T C H < E834: EQU $ LY WDK+2 < Y=256 (POUR TRANSLATER < L'@OCTET DU BUFFER DE SAVE). LB IMAG2 < B=@OCTET INITIALE DU BUFFER < DE SAVE. STZ WDK+3 < RAZ DU NUMERO DE SECTEUR COURANT. LXI LIMAG/128 < X=NBRE DE SECTEURS A SAVER. LAD WDK < < BOUCLE DE SAVE DE L'IMAGE COURANTE PAR SECTEUR : < E832: EQU $ STB WDK+1 < MAJ DE L'@OCTET DU BUFFER. PSR X < SAVE LE DECOMPTE DE SECTEURS. SVC 0 < SAVE LE SECTEUR COURANT. PLR X < RESTAURE LE DECOMPTE DES SECTEUR. IC WDK+3 < PROGRESSION DU NUMERO DE SECTEUR < COURANT. ADR Y,B < PROGRESSION DE L'@OCTET BUFFER. JDX E832 < AU SUIVANT ... E410J: JMP E410 < VERS L'INTERRO. UTILISATEUR. < < O P E R A T I O N S L O G I Q U E S E N T R E < I M A G E C O U R A N T E E T I M A G E < S C R A T C H : < < FONCTION : < CE MODULE PERMET DE REALISER < LES 3 FONCTION SUIVANTES , SELON < LE MODE D'APPEL : < O : IMAGE-COURANTE=IMAGE-COURANTE.OR.IMAGE-SCRATCH < A : IMAGE-COURANTE=IMAGE-COURANTE.AND.IMAGE SCRATCH < E : IMAGE-COURANTE=IMAGE-COURANTE.EOR.IMAGE-SCRATCH < H : IMAGE-COURANTE=IMAGE-COURANTE.AD.IMAGE SCRATCH < Z : IMAGE-COURANTE=IMAGE-COURANTE.SB.IMAGE SCRATCH < AINSI QUE : < U : IMAGE-COURANTE=IMAGE-SCRATCH < (U='UP') < E2500: EQU $ IF ORDI-"T",XWOR%,,XWOR% LAI '1D < CODE DU NOP AFIN DE NE PAS < MELANGER L'IMAGE SCRATCH AVEC < L'IMAGE COURANTE LORS DU RAPPEL. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LAI '04 < CODE DU NOP AFIN DE NE PAS < MELANGER L'IMAGE SCRATCH AVEC < L'IMAGE COURANTE LORS DU RAPPEL. XWOR%: VAL 0 JMP E845 E2550: EQU $ < AD. LAI 'A9 < CODE DU AD INDIRECT SUR L. JMP E845 E2551: EQU $ < SB. LAI 'A8 < CODE DU SB INDIRECT SUR L. JMP E845 E842: EQU $ < OR. LAI 'B2 < CODE DU OR INDIRECT SUR L. JMP E845 E843: EQU $ < AND. LAI 'B3 < CODE DU AND INDIRECT SUR L. JMP E845 E844: EQU $ < EOR. LAI 'B4 < CODE DU EOR INDIRECT SUR L. E845: EQU $ STBY &AOP < MISE EN PLACE DE L'INSTRUCTION < VARIABLE D'OPERATION LOGIQUE < ENTRE IMAGES. < < ENTREE DU NOM DE LA NOUVELLE IMAGE COURANTE : < IF TITV,X100,,X100 LAD MNOM BSR APRINT < ENVOI D'UNE INVITATION. LAD DEMIN SVC 0 < ENTREE DU NOM. X100: VAL 0 IF TITV,,X100, BSR AINOM < RECUPERATION NOM DANS ITEM1. X100: VAL 0 < < OPERATION LOGIQUE ENTRE LES 2 IMAGES : < BR AOPER < VERS L'OPERATION LOGIQUE ... < < < M O D I F I C A T I O N I N T E R A C T I V E : < D E L ' I M A G E V I D E O : IF TITV,,X100, < < < A T T E N T I O N : < POUR QUE L'INTERACTION AIT LIEU, < IL FAUT : < 1- LA COMMANDE 'G' DOIT ETRE UTILISEE < A LA SUITE DE 'M'; SA VALIDITE NE PORTE < QUE JUSQU'A LA PROCHAINE COMMANDE < PRIMAIRE. < 2- LE NVP='0B DOIT ETRE ASSIGNE. X100: VAL 0 < < < COMMANDES RECONNUES : IF TITV,,X100, < G : VALIDATION DE L'INTERACTION SUR '0B < JUSQU'A LA PROCHAINE COMMANDE < PRIMAIRE, X100: VAL 0 < F : FIN D'INTERACTION , < O : MISE A L'ORIGINE DE 'A' , < A : ORIGINE D'UN SEGMENT , < B : EXTREIMITE D'UN SEGMENT ; LE SEGMENT < AB EST TRACE SUIVANT 'APOINT' , < PUIS B DEVIENT A , < S : IDEM A 'B' , SAUF QUE A NE CHANGE PAS , < - : MODE TRACE 'RESET' (NOIR) , < + : MODE TRACE 'SET' (BLANC) , < E : MODE 'SET' SI 'RESET'/'RESET' SI 'SET' , < I : MODE TRACE 'INVER' (INVERSION) , < C : COMMANDE NEUTRE (CURSEUR) , < N : REINITIALISATION DE LA TOPO DES BANDES , < M : MONTERER A TV/TI LA BANDE QUE < L'ON VIRTUALISE , < T : MONTRER A TV/TI LA BANDE REELLE < ASSOCIEE A UNE BANDE VIRTUELLE 'M' , < V : COLORIAGE VOLET A 1 SUR FOND 0 , < (ITEST=1) < W : COLORIAGE VOLET A 0 SUR FOND 1 , < (ITEST=0) < 0 : MISE A NOIR DU POINT COURANT , < 1 : MISE A BLANC DU POINT COURANT. < < LE POINT COURANT EST DEFINI PAR < LA POSITION COURANTE DU CURSEUR < GRAPHIQUE ('GIN'). < E791: EQU $ < RETURN DE L'INTERACTION. PLR A STA APOINT < RESTAURE L'APOINT D'ENTREE. IF ORDI-"T",XWOR%,,XWOR% JMP E410 < VERS L'INTERROGATION '>'. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JMP E410J < VERS L'INTERRO. UTILISATEUR. XWOR%: VAL 0 E790: EQU $ < ENTRY DE L'INTERACTION. LA APOINT < SAVE L'APOINT D'ENTRY. PSR A E780: EQU $ < < MISE A L'ORIGINE DE A ET B : < LA NLIG < Y INITIAL. STZ X1 < X1=0. STA Y1 < Y1=NLIG. STZ X2 < X2=0. STA Y2 < Y2=NLIG. < < INTERACTION CURSEUR : < IF TITV,,X100, LAI 'FF STBY CURSOR < A PRIORI : PAS D'INTERACTION !!! X100: VAL 0 E770: EQU $ IF ORDI-"S",XWOR%,,XWOR% LAD STDKU SVC 0 < VISUALISATION AVANT LE CURSEUR... XWOR%: VAL 0 LAD OG SVC 0 < MISE EN GRAPHIQUE DE LA VISU. LAD CU SVC 0 < MISE EN FONCTION DU CURSEUR. LAD LCU SVC 0 < LECTURE DU CURSEUR GRAPHIQUE. < < STABILISATION DE L'2MAGE : < IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE E4002 ACTD 'C XWOR%: VAL 0 E4002: EQU $ < ON N'EST PAS SSOUS :SYS ... < < COORDONNEES DU POINT COURANT : < LA CURSOR+1 < A=Y(CURSEUR). SLRS DEDY < PRISE EN COMPTE DE LA DEFINITION < RELATIVE DE LA VIDEO. SB NLIG < DU AU FAIT QUE LES AXES Y < DE LA VIDEO ET DES VISUS < SONT INVERSES. NGR A,Y < Y=Y(POINT COURANT). LA CURSOR+2 < A=X(CURSEUR). SLRS DEDX < PRISE EN COMPTE DE LA DEFINITION < RELATIVE DE LA VIDEO. LR A,X < X=X(POINT COURANT). < < SIMULATION D'UN CURSEUR SUR LA TV : < LB TEMPO < B=NBRE DE CLIGNOTTEMENTS (PAIR). E781: EQU $ IF ORDI-"S",XWOR%,,XWOR% PSR X LAD STDKU SVC 0 < EXECUTION MAITRE DE SP3. PLR X XWOR%: VAL 0 BSR AINVER < NBRE PAIR D'INVERSION DU POINT < COURANT ... ADRI -1,B < DECOMPTE DES CLIGNOTEMENTS. CPZR B < EST-CE FINI ??? JG E781 < NON , ENCORE ... < < ANALYSE DES DESIRS DE L'UTILISATEUR : < LBY CURSOR < A=CARACTERE DE DEBLOCAGE. IF TITV,,X100, CPI 'FF < Y-A-T'IL EU INTERACTION ??? JNE E6000 < OUI , (A) EST BON , BSR ADESIR < NON : SIMULATION DE L'ENTREE ... E6000: EQU $ X100: VAL 0 CPI "B" JE E774 < EXTREMITE SEQUENTIELLE < D'UN SEGMENT AB. CPI "A" JE E773 < ORIGINE D'UN SEGMENT. CPI "0" JE E771 < VERS LA MISE A NOIR DU POINT. CPI "1" JE E772 < VERS LA MISE A BLANC DU POINT. CPI "S" JE E775 < EXTREMITE ETOILEE D'UN SEGMENT. CPI "-" JE E776 < MISE EN MODE 'RESET' (NOIR). CPI "+" JE E777 < MISE EN MODE 'SET' (BLANC). CPI "E" JE E785 < VERS LA PERMUTATION 'SET'/'RESET' CPI "I" JE E778 < MISE EN MODE 'INVER' (INVERSION). CPI "C" JE E770 < COMMANDE NEUTRE ... CPI "F" JE E791 < FIN DE L'INTERACTION , RETOUR < A L'INTERROGATION ('>'). CPI "O" JE E780 < MISE A L'ORIGINE DE A ET DE B. < COIN EN BAS A GAUCHE). CPI "V" JE E1010 < VERS LE COLORIAGE D'UN VOLET. CPI "W" JE E1020 < COLORIAGE INVERSE D'1N VOLET. CPI "N" JE E2300 < REINITIALISATION DE LA TOPO. CPI "M" JE E2301 < INDICATION BANDE A VIRTUALISER. CPI "T" JE E2302 < INDICATION DE LA BANDE REELLE. IF TITV,,X100, CPI "G" < VALIDATION INTERACTION '0B ??? JE VALCU < ET OUI... X100: VAL 0 LAD MERR BSR APRINT < DESIR INCOMPREHENSIBLE ... JMP E770 < VERS UNE NOUVELL INTERACTION. < < MISE A NOIR DU POINT (X,Y) : < E771: EQU $ BSR ARESET < RESET DU POINT. JMP E770 < VERS L'INTERACTION. < < MISE A BLANC DU POINT (X,Y) : < E772: EQU $ BSR ASET < SET DU POINT. JMP E770 < VERS L'INTERACTION. < < ORIGINE 'A' D'UN SEGMENT : < E773: EQU $ STX X1 < CHANGEMENT DE M1 ('A'). STY Y1 < CHANGEMENT DE M1 ('A'). JMP E770 < VERS UNE NOUVELLE INTERACTION. < < EXTREMITE 'B' DU SEGMENT AB : < E774: EQU $ STX X2 < CHANGEMENT DE POINT M2 ('B'). STY Y2 < CHANGEMENT DE POINT M2 ('B'). BSR ASEG < TRACE DU SEGMENT AB. STX X1 < M1 <-- M2. STY Y1 < ('B' DEVIENT LE NOUVEAU 'A'). JMP E770 < VERS UNE NOUVELLE INTERACTION. < < EXTREMITE 'S' D'UN SEGMENT : < E775: EQU $ STX X2 < CHANGEMENT DE POINT M2 ('S'). STY Y2 < CHANGEMENT DE POINT M2 ('S'). LA X1 LB Y1 PSR A,B < SAVE LE POINT 'A' (M1). BSR ASEG < TRACE DU SEGMENT M1M2. PLR A,B < RESTAURE LE POINT 'A' (M1). STA X1 STB Y1 JMP E770 < VERS UNE NOUVELLE INTERACTION. < < MODES DE TRACE DES SEGMENTS : < E776: EQU $ LB ARESET JMP E779 E777: EQU $ LB ASET JMP E779 E778: EQU $ LB AINVER E779: EQU $ STB APOINT < MAJ TEMPORAIRE DE APOINT. JMP E770 < VERS L'INTERACTION. E785: EQU $ LB ASET < 'RESET' COURANT A PRIORI. LA APOINT CP ARESET JE E779 < PASSAGE EN MODE 'SET'. LB ARESET < MODE 'SET' COURANT A PRIORI. CP ASET JE E779 < PASSAGE AU MODE 'RESET'. JMP E770 < MODE INCHANGE SI 'INVER'. < < C O L O R I A G E A 0 S U R F O N D 1 : < E1020: EQU $ LAI 0 < CONVENTIONS INVERSEES. JMP E1021 < < C O L O R I A G E A 1 S U R F O N D 0 : < E1010: EQU $ LAI 1 < CONVENTIONS NORMALES. E1021: EQU $ STA ITEST < SAVE LES CONVENTIONS. LY NLIG < Y=INDEX VERTICAL. < < BALAYAGE VERTICAL (Y) : < E1001: EQU $ LX NPPL < X=INDEX HORIZONTAL. < < BALAYAGE HORIZONTAL (X) : < E1002: EQU $ < < RECHERCHE DU DERNIER POINT A 1 DE LA LIGNE (Y) : < BSR ATEST < TEST DU POINT (X,Y). JC E1003 < ON S'ARRETE SUR LE DERNIER < POINT A 1. ADRI -1,X < SI 0 , PASSAGE AU POINT < PRECEDENT DE LA LIGNE. CPZR X < DEBUT DE LIGNE ??? JGE E1002 < NON , PASSAGE AU POINT PRECEDENT. < < CAS D'UNE LIGNE NOIRE , OU FIN DE < TRAITEMENT D'UNE LIGNE : < E1004: EQU $ ADRI -1,Y < PASSAGE A LA LIGNE PRECEDENTE. CPZR Y < DEBUT D'IMAGE ??? JGE E1001 < NON , LIGNE PRECEDENTE ... JMP E770 < C'EST FINI , VERS L'INTER- < ACTION DU CURSEUR. < < CAS OU ON A TROUVE UN DERNIER POINT < BLANC (1) SUR LA LIGNE COURANTE : < E1003: EQU $ LR X,B < B=COORDONEE X DU DERNIER POINT < BLANC (1) DE LA LIGNE (Y). LXI 0 < RETOUR AU DEBUT DE LA LIGNE (Y). < < RECHERCHE DU 1ER POINT BLANC : < E1005: EQU $ BSR ATEST < TEST DU POINT (X,Y). JC E1006 < ON S'ARRETE SUR LE 1ER POINT < BLANC (1) TROUVE. ADRI 1,X < SINON , PASSAGE AU POINT SUIVANT. JMP E1005 < PARCOURS DE LA LIGNE (Y) < SANS PRECAUTIONS , CAR ON EST < SUR QU'IL Y A AU MOINS UN < POINT BLANC (PEUT-ETRE UNIQUE??). < < CAS OU ON A TROUVE UN 1ER POINT BLANC (1) : < E1006: EQU $ CPR X,B < A-T'ON BALAYE TOUS LES POINTS < DU 1ER AU DERNIER BLANC ??? JE E1004 < OUI , ALORS , IL FAUT PASSER < A LA LIGNE PRECEDENTE. BSR APOINT < SINON , ON TRAITE CE POINT < (X,Y) A 1 (BLANC). ADRI 1,X < PASSAGE AU POINT SUIVANT. JMP E1006 < < T O P O G R A P H I E D E S B A N D E S < H O R I Z O N T A L E S : < < INDICATION D'UNE BANDE VIRTUELLE : < E2301: EQU $ LR Y,A < A=NUMERO DE LIGNE COURANTE. SLRS 3 < A=NUMERO DE BANDE COURANTE. STA BANDE < SAVE LA BANDE VIRTUELLE COURANTE. BR AE770 < VERS L'INTERROGATION ... < < BANDE REELLE D'UNE BANDE VIRTUELLE : < E2302: EQU $ LX BANDE < X=BANDE VIRTUELLE COURANTE. LR Y,A < A=LIGNE COURANTE. SLRS 3 < A=BANDE COURANTE. STBY &ATOPO < SAVE LA TOPOGRAPHIE. BR AE770 < VERS L'INTERROGATION ... < < REINITIALISATION DE LA TOPO : < E2300: EQU $ LAI LIMAG/128-1 < A=NUMERO DE LA DERNIERE BANDE. E2303: EQU $ LR A,X < X=NUMERO REGISTRE TOPOGRAPHIQUE. STBY &ATOPO < REGISTRE <-- NUMERO DE REGISTRE. ADRI -1,A < DECOMPTE. JAGE E2303 < PARCOURS DE LA MEMOIRE TOPO. STZ BANDE < RAZ LA BANDE VIRTUELLE COURANTE. BR AE770 < VERS L'INTERROGATION ... IF TITV,,X100, < < V A L I D A T I O N I N T E R A C T I O N ' 0 B : < VALCU: EQU $ LA CU ADRI -3,A < CALCUL DE 'OG' A PARTIR DE 'CU'. STA OG < OG POSSEDE CETTE VALEUR JUSQU'A < LA PROCHAINE COMMANDE PRIMAIRE. BR AE770 < VERS L'INTERROGATION SUR '0B. X100: VAL 0 < < E N T R E E D E L A T O P O G R A P H I E : < < FONCTION : < CE MODULE PERMET D'INITIALISER DIRECTEMENT < LES REGISTRES TOPOGRAPHIQUES DE L'IMAGE ; < CEUX-CI SONT BAPTISES 0,....,9,A,...,V. < < CAS DES ERREURS : < LA TOPOGRAPHIE EST ALORS < REINITIALISEE ; UNE ERREUR < VOLONTAIRE PERMET DONC DE < REINITIALISER LA TOPOGRAPHIE ... < VIRT: EQU $ IF TITV,X100,,X100 LAD MTOPO BSR APRINT < ENVOI DES NUMEROS DE REGISTRES. X100: VAL 0 LXI 0 < X=NUMERO DE REGISTRE COURNT. < < BOUCLE DE RECUPERATION : < VIRT1: EQU $ PSR X < SAVE LE NUMERO DE REGISTRE. LAI 0 < @MESSAGE=0. BSR ADESIR < RECUPERATION D'UN CARACTERE. PLR X < RESTAURE LE NUMERO DE REGISTRE. ADRI -'30,A < CONVERSION BINAIRE. JAL VIRT2 < ERREUR ... CPI 9 < EST-CE UN CHIFFRE ??? JLE VIRT3 < OUI , OK. ADRI -'41+'39+1,A < SINON , SUITE CONVERSION. CPI 9 < EST-CE UNE LETTRE ??? JLE VIRT2 < NON , ERREUR. CPI LIMAG/128-1 < EST-CE UN BON NUMERO ??? JG VIRT2 < NON , ERREUR. VIRT3: EQU $ < CAS DES BONS NUMEROS VIRTUELS. STBY &ATOPO < MEMORISATION TOPOGRAPHIE. ADRI 1,X < PASSAGE AU REGISTRE SUIVANT. LR X,A CPI LIMAG/128 < EST-CE FINI ??? JL VIRT1 < NON , ON CONTINUE. VIRT5: EQU $ BR AINTER < SI OUI , VERS L'2NTERROGATION. < < CAS DES ERREURS : < VIRT2: EQU $ LR X,Y < Y=INDEX COURANT DE LA TOPO. LAI LIMAG/128-1 < A=NUMERO DE LA DERNIERE BANDE. VIRT4: EQU $ LR A,X < LE REGISTRE TOPOGRAPHIQUE EST STBY &ATOPO < AVEC SON PROPRE NUMERO. ADRI -1,A < PASSAGE AU NUMERO PRECEDENT. JAGE VIRT4 < AU REGISTRE PRECEDENT ... CPZR Y < L'ERREUR S'EST-ELLE PRODUITE SUR < LE 1ER REGISTRE TOPO ??? JE VIRT5 < OUI , ON CONSIDERE QU'IL < N'Y AP AS ERREUR .... BR AERR < VERS LE MESSAGE D'ERREUR. < < O P E R A T I O N L O G I Q U E < E N T R E I M A G E S : < < ORIGINE : < BIT0=0 : SENS CROISSANT , < =1 : SENS DECROISSANT , < BIT1=0 : FAIRE UN MIROIR OK , < 1 : SUIVANT LE BIT2 : < BIT2=0 : PAS DE MIROIR, PERMET < DONC DES EFFETS TRES < SPECIAUX... < 1 : CHOIX SELECTIF DE LA < COULEUR DE L'IMAGE < COURANTE. < BIT14-15 : INDEX INITIAL XIMAG SI BIT2=0, < SELECTION DES COULEURS SI BIT2=1. < < OPER: EQU $ < < DEMANDE DE L'ORIGINE DE L'IMAGE COURANTE : < IF TITV,X100,,X100 LAD MORG BSR APRINT < ENVOI D'1NE INVITATION. LAD DEMFON SVC 0 < ENTREE DE 4 CARACTERES. X100: VAL 0 LYI 4 BSR AHEX < CONVERSION DES 4 CARACTERES < CONTENUS DANS REP. < (ET DANS L'ITEM1 POUR 'TI') IF ORDI-"T",XWOR%,,XWOR% JNE OPER < ERREUR DE CONVERSION ... XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JE E475X < REPONSE HEXA OK... XR A,X CPI 1 < 1 SEUL CARACTERE RECONNU ??? XR A,X JNE OPER < NON, ERREUR... CPI 'E < OUI, EST-CE 'E OU 'F ??? JL OPER < NON, ERREUR... OR RWDKU+3 < OUI, ON FORME XYZE/XYZF, OU XYZ0 EST < L'ADRESSE DKU COURANTE, SCRS XDKU < MISE SOUS FORME EXYZ/FXYZ, ADRI 1,A < ET INCREMENTATION AUTOMATIQUE... E475X: EQU $ XWOR%: VAL 0 < < VALIDATION DE L'ORIGINE : < LBI 1 < +1 : SENS CROISSANT A PRIORI ... LYI 0 < INDEX INITIAL DE PARCOURS < POSITIF D'1N SECTEUR. LXI 0 < DEPART SUR LE 1ER SECTEUR < DE L'IMAGE SCRATCH A PRIORI. JAGE E475 < OK, SENS CROISSANT... NGR B,B < SINON : B=-1 (DECROISSANT). LYI 127 < INDEX INITIAL DE PARCOURS < NEGATIF DE SECTEUR. LXI LIMAG/128-1 < DEPART SUR LE DERNIER SECTEUR < DE L'IMAGE SCRATCH. STZ MIROR < MIROIR A PRIORI (=0). TBT 1 < SUPPRESSION DE MIROIR DEMANDEE??? JNC E2840 < 0 : NON , MIROIR OK. TBT 2 JC COOL1 < CHOIX COULEUR IMAGE COURANTE. STA MIROR < 1 : SUPPRESSION DU MIROIR (#0). RBT 1 < SUPPRESSION DE L'INDICATEUR (1). E2840: EQU $ RBT 0 < RAZ LE BIT0 DE L'ORIGINE. E475: EQU $ STB SENSX < SENSX=+1/-1. STY SECTX < SAVE L'INDEX INITIAL DE PARCOURS < DE SECTEUR. CP ALIMAG < VALIDATION DE L'ORIGINE PAR < RAPPORT A LA LONGUEUR DE IMAGE. STA XIMAG < OK , ON INITIALISE XIMAG < AVEC L'ORIGINE. IF ORDI-"S",XWOR%,,XWOR% JGE CROTA < C'EST PEUT-ETRE UNE MODIFICATION DES < REGISTRES DE COULEUR SI BIT1=1... XWOR%: VAL 0 ADRI -127,Y SBR Y,B < B=VALEUR DE TEST DE FIN DU < PARCOURS D'UN SECTEUR. STX RDK+3 < INITIALISATION NUMERO SECTEUR < COURANT DE L'IMAGE SCRATCH. LXI LIMAG/128 < X=NBRE DE SECTEURS A LIRE. < < BOUCLE D'OPERATIONS : < E840: EQU $ PSR X < SAVE LE DECOMPTE DES SECTEURS. < < ETAT DU SECTEUR COURANT : < PSR B LA PATS LB PATS+1 < (A,B)=LISTE DES SECTEURS. LX RDK+3 < X=SECTEUR COURANT. TBT 0,X < FAUT-IL TRAITER LE SECTEUR (X) ??? PLR B LAI 0 ADCR A STA INDICS < A=0 : NE PAS TRAITER LE SECTEUR. JAE E2104 < INUTILE DE LIRE LE SECTEUR (X). < < ENTREE SECTEUR COURANT : < LBY &ATOPO < A=SECTEUR REEL ASSOCIE AU < SECTEUR VIRTUEL (X). STA RDK+3 < MAJ DE LA DEMANDE DE LECTURE. PSR X < ET SAVE LE NUMERO DE SECTEUR < VIRTUEL. LAD RDK SVC 0 < LECTURE DU SECTEUR COURANT. PLR X STX RDK+3 < RESTAURE LE SECTEUR VIRTUEL < COURANT. E2104: EQU $ LA RDK+3 AD SENSX STA RDK+3 < CALCUL DU NUMERO DU SECTEUR < SUIVANT. LY SECTX < REINITIALISATION DE L'INDEX DE < PARCOURS DU SECTEUR COURANT. E841: EQU $ LR Y,X < X=INDEX COURANT DANS SECTEUR. CPZ INDICS < OPERE-T'ON AVEC LE SECTEUR < COURANT ???? JE E2100 < NON , ON NE FAIT PAS L'OPERATION. LA &ASECT1 < ACCES AU MOT COURANT SECTEUR. CPZR B < EST-CE UN PARCOURS CROISSANT ??? JG E1300 < OK , (A) EST BON. CPZ MIROR < FAUT-IL MIROITER LE MOT ??? JNE E1300 < NON , ON SAUTE LE MIROIR !!! < < CAS D'UN PARCOURS DECROISSANT : < IL FAUT MIROITER (???) LE MOT COURANT < DU SECTEUR ; A NOTER QUE B='FFFF (-1). < LXI 16 < X=NBRE DE BITS A INVERSER. E1301: EQU $ TBT 31,X < TEST UN BIT DE A. JC E1302 < 1 : IL L'EST DEJA DANS B. NGR X,X < 0 : IL FAUT LE RAZER DANS B. RBT 0,X < ARZ EN MIROIR. NGR X,X < RESTAURE X. E1302: EQU $ JDX E1301 < AU BIT SUIVANT ... LR B,A < A=MOT COURANT DU SECTEUR VU < DANS UN MIROIR. LBI -1 < RESTAURE (B)=-1 : VALEUR DE < TEST DE (Y). < < OPERATION ELEMENTAIRE : < E1300: EQU $ LX XIMAG < X=INDEX COURANT DE L'IMAGE < COURANTE. OP: OR &AIMAG1 < LE MOT COURANT DE L'IMAGE < COURANTE EST OPERER AVEC LE < MOT COURANT DU SECTEUR COURANT. STA &AIMAG1 < LE RESULTAT EST REMIS DANS < L'IMAGE COURANT. E2100: EQU $ < CAS DES SECTEURS IGNORES. LA XIMAG ADRI 1,A < INCREMENTATION DE XIMAG. AND MASKX < ET CALCUL MODULO LIMAG. STA XIMAG < MAJ DE XIMAG. LA SENSX ADR A,Y < INDEX DU MOT SUIVANT DU SECTEUR < COURANT. CPR Y,B < A-T'ON EXPLORE TOUT LE SECTEUR < COURANT ??? JNE E841 < NON , ON CONTINUE ... PLR X < OUI , RESTAURATION DU DECOMPTE < DES SECTEURS A LIRE ... JDX E840 < AU SECTEUR SUIVANT ... BR AINTER < ET ENFIN , VERS L'INTERROGATION < DE L'UTILISATEUR ... IF ORDI-"S",XWOR%,,XWOR% < < < M O D I F I C A T I O N D E S R E G I S T R E S < D E C O U L E U R : < < < FONCTION : < LES REGISTRES DE COULEUR PERMETTENT < DE COLORIER AVEC DES NIVEAUX DE GRIS < LES DIFFERENTES COMBINAISONS DE 3 < POINTS DE MEME COORDONNEES APPARTENANT < AUX 3 TRAMES R, V ET B ; SOIENT PR, PV < ET PB UN TRIPLET DE TELS POINTS. < CHAQUE COMBINAISON (PR,PV,PB), CES < 3 POINTS ETANT BINAIRES (0/1) DONNENT < DES NOMBRES DE 0 A 7 : < PB=0 PV=0 PR=0 --> 000='0, < PB=0 PV=0 PR=1 --> 001='1, < PB=0 PV=1 PR=0 --> 010='2,... < PB=1 PV=1 PR=1 --> 111='7, < SOIT I L'UNE DES 8 VALEURS POSSIBLES ; < CETTE VALEUR SERT D'INDEX DANS 3 MEMOIRES < PARALLELES MR, MV ET MB CONTENANT CHACUNE < DES MOTS DE 4 BITS PERMETTANT DE CODER < DONC 16 NIVEAUX PAR COULEUR. < SOIT DONC LE POINT P(PB,PV,PR) ; A CE < POINT ON ASSOCIE DONC LE NOMBRE I TEL < QUE I=PB*4+PV*2+PR*1 ; LE POINT P < APPARAITRA DONC SUR L'ECRAN COMME LA < SUPERPOSITION DU BLEU AVEC LE NIVEAU < -MB(I), DU VERT AVEC LE NIVEAU -MV(I), < ET ENFIN DU ROUGE AVEC LE NIVEAU -MR(I) ; < LE SIGNE "MOINS" INDIQUE QUE LES NIVEAUX < SONT COMPLEMENTES A 1 DANS LES 3 MEMOIRES. < < < UTILISATION : < EN REPONSE A 'ORG' DES DIFFERENTES < OPERATIONS INTER-IMAGES, ON PEUT AGIR < SUR CES 3 MEMOIRES PAR LA REPONSE : < ORG=4XYZ, QUI A L'EFFET SUIVANT : < 0<=X<=7 : SELECTIONNE 0 A 3 DES MEMOIRES, < PAR EXEMPLE X=4 SELECTIONNE MB, < X=2 : MV ET X=1 MR ; ON PEUT COMBINER < CES DIFFERENTES VALEURS ; < 0<=Y<=7 : DONNE L'INDEX DANS LES MEMOIRES < SELECTIONNEES, ET ENFIN < 0<=Z<=15 : DONNE LE NIVEAU DE GRIS COMPLEMENTE < A 1, C'EST-A-DIRE QUE Z=0 DONNE LE MAXIMUM < (BLANC), ET 15 LE MINIMUM (NOIR)... < < CROTA: EQU $ TBT 1 JNC OPER < ERREUR... ON REDEMANDE 'ORG'... LBY &AOP < RECUPERATION DE L'OPERATION DEMANDEE, STBY &AOP2 < ET GENERATION... LA XIMAG < NOTA : ON RAZE LES BITS INUTILISES SLLS 4 < COMME CECI. SLRS 4 OP2: OR &AMCOOL < OPERATION DYNAMIQUE : CUMUL STA &AMCOOL < MAJ DES ORDRES COURANTS... LBY &AOP2 CPI 'A8 < A-T'ON FAIT UNE SOUSTRACTION ??? JNE CROTA2 < NON... LA &AMCOOL < OUI, IL FAUT NGR A,A < INVERSER STA &AMCOOL < LE RESULTAT... CROTA2: EQU $ LAD DEMCU3 SVC 0 < ENVOI DE '0XYZ, CROTA1: EQU $ BR AINTER < VERS L'INTERROGATION... < < < A C C E S A B S O L U A U X I M A G E S < S U R D K U : < < < FONCTION : < LE NSP='8A EST ASSIGNE IMPLICI- < TEMENT A 'DKU' ; ENSUITE LES COMMANDES < SUIVANTES SONT DISPONIBLES : < ORG='FXXX : LECTURE DE L'IMAGE SITUEE EN 'XXX0, < ORG='EXXX : ECRITURE DE L'IMAGE COURANTE < EN 'XXX0 SUR 'DKU'. < < COOL1: EQU $ TBT 3 < LECTURE OU ECRITURE ??? LB RWDKU RBT 14+16 < READ A PRIORI... JC COOL2 < OUI (1)... SBT 14+16 < NON (0) : WRITE... COOL2: EQU $ STB RWDKU < MAJ DE LA DEMANDE... AND M0FFF CP VALAD1 < VALIDATION... JL OPER < ERREUR... CP VALAD2 < VALIDATION... JGE OPER < ERREUR... SLLS XDKU < A=ADRESSE DISQUE, STA RWDKU+3 < MAJ DE LA DEMANDE... LAD RWDKU SVC 0 < ENVOI DE LA DEMANDE... JNE OPER < ERREUR !!! BR AINTER < COMMANDE SUIVANTE... XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% < < < C H O I X C O U L E U R I M A G E C O U R A N T E : < < < FONCTION DES BITS DE A : < < IMAGE 100 * IMAGE 010 * IMAGE 001 * (PATTERN CYCLIQUE) <------------------------------------------------------------------ < BIT 5 * ROUGE * NOIR * NOIR * <------------------------------------------------------------------ < BIT 6 * NOIR * ROUGE * NOIR * <------------------------------------------------------------------ < BIT 7 * NOIR * NOIR * ROUGE * <------------------------------------------------------------------ <------------------------------------------------------------------ < BIT 9 * VERT * NOIR * NOIR * <------------------------------------------------------------------ < BIT10 * NOIR * VERT * NOIR * <------------------------------------------------------------------ < BIT11 * NOIR * NOIR * VERT * <------------------------------------------------------------------ <------------------------------------------------------------------ < BIT13 * BLEU * NOIR * NOIR * <------------------------------------------------------------------ < BIT14 * NOIR * BLEU * NOIR * <------------------------------------------------------------------ < BIT15 * NOIR * NOIR * BLEU * < < COOL1: EQU $ LBI 0 < CLEAR REGISTRE B. LXI 3 < POUR LES 3 COULEURS. COOL2: EQU $ SLRD 3 < RECUPERATION CHOIX 1 COULEUR. SLRS 1 < ELIMINATION BIT NON SIGNIFICATIF. JDX COOL2 < NEXT... < < A T T E N T I O N : < X=0 (CF. LE JDX) !!! < LBY &AOP < RECUPERATION DE L'OPERATION < LOGIQUE COULEUR DEMANDEE. STBY &AOP2 < POSITIONNEMENT D'UNE INSTRUC- < TION VARIABLE. LR B,A < A=FUTUR MOT0 DE L'IMAGE COURANTE. OP2: OR &AIMAG1 < INSTRUCTION VARIABLE !!! < RAPPEL : X=0 (JDX) !!!! STA &AIMAG1 < MAJ COULEUR IMAGE COURANTE. BR AINTER < VERS L'INTERRO UTILISATEUR. XWOR%: VAL 0 < < F I L T R A G E I M A G E : < < FONCTION : < 1- B=0 : < CE MODULE ESAYE DE SUPPRIMER LES < POINTS ANORMAUX D'UNE IMAGE , EN < L'OCCURENCE LES POINTS BLANCS (1) < QUI N'ONT PAS DE VOISINS VERTICAUX A 1. < 2- B=1 : < CE MODULE PERMET DE COLRIER D'UNE < MANIERE FICTIVE LES IMAGES , AVEC < MALHEUREUSEMENT UN PETIT DEFAUT < EN CE QUI CONCERNE LES CONCAVITES HAU-GAUCHE ... < 3- B=-1 : < 3.1- MATRICE=(0,1,1,0) : < CE MODULE PERMET ALORS DE TRANSPOSER < LA MATRICE DE L'IMAGE ET CECI < BIT A BIT ; IL S'AGIT DONC D'1NE < SYMETRIE PAR RAPPORT A LA DIAGONALE < PRINCIPALE DE CELLE-CI. < 3.2- MATRICE#(0,1,1,0) : < CE MODULE PERMET DES TRANSFORMATIONS < BIZARRES ET VARIEES !!?!?!! < FILTR: EQU $ LAI 1 STA ITEST < MISE EN MODE TESTS NORMAUX. LY NLIG < INDEX DE BALAYAGE VERTICAL. < < BOUCLE DE BALAYAGE VERTICAL : < E2001: EQU $ PSR B < SAVE LA FONCTION DEMANDEE. LR Y,A < Y=NUMERO DE LIGNE COURANTE. SLRS 3 LR A,X < X=NUMERO DE BANDE COURANTE. LA PATS < ACCES A LA LISTE DES BANDES LB PATS+1 < A TRAITER. TBT 0,X < LA BANDE COURANTE (X) DOIT- < ELLE ETRE TRAITEE ??? PLR B < RESTAURE LA FONCTION DEMANDEE. JNC E2821 < LA BANDE COURANTE EST IGNOREE. LX NPPL < X=INDEX DE BALAYAGE HORIZONTAL. CPZR B < EST-CE UNE TRANSPOISTION ??? JGE E2002 < NON , (X) EST BON. CPZ DIAGON < UN PARCOURS DIAGONAL EST-IL < DEMANDE ??? JE E2002 < NON , PARCOURS DE L'IMAGE < ENTIERE. LR Y,X < DANS LE CAS D'UNE TRANSPOSITION , < ON FAIT UN PARCOURS TRIANGULAIRE < DE L'IMAGE. < < BOUCLE DE BALAYAGE HORIZONTAL : < E2002: EQU $ CPZR B JL E2021 < DEMANDE DE TRANSPOSITION. BSR ATEST < TEST DU POINT COURANT M(X,Y). JNC E2003 < ININTERESSANT : M(X,Y)=0. < < CAS OU LE POINT COURANT M(X,Y)=1 : < ADRI 1,Y < PASSAGE AU VOISIN M(X,Y+1). CPZR B < FILTRAGE OU PSEUDO-CLORIAGE ??? JG E2011 < PSEUDO-COLORIAGE DE L'IMAGE. < < FILTRAGE DE L'IMAGE : < BSR AEXIST < TEST DU POINT M(X,Y+1) ??? ADRI -1,Y < RETOUR AU POINT M(X,Y). JAE E2003 < ININTERESSANT M(X,Y+1) < EXISTE ET EST A 1. ADRI -1,Y < PASSAGE SUR M(X,Y-1). BSR AEXIST < TEST DU VOISIN M(X,Y-1) ??? ADRI 1,Y < RETOUR AU POINT M(X,Y). JAE E2003 < ININTERESSANT : M(X,Y-1) < EXISTE ET EST A 1. BSR ARESET < DANS LE CAS OU M(X,Y) A 2 < VOISIN A 0 OU INEXISTANTS , < ON LE CONSIDRE COMME SINGULIER , < ET ON LE SUPPRIME ... < < CHANGEMENT DE POINT COURANT M(X,Y) : < E2003: EQU $ ADRI -1,X < BALAYAGE HORIZONTAL. E2013: EQU $ CPZR X JGE E2002 E2820: EQU $ < ENTRY SAUT DE LA BANDE COURANTE. ADRI -1,Y < BALAYAGE VERTICAL. CPZR Y JGE E2001 BR AINTER < RETOUR A L'INTERROGATION ... < < < P S E U D O - C O L O R I A G E : < < E2011: EQU $ ADRI -1,X < PASSAGE AU POINT M(X-1,Y+1). CPZR X < L'X EXISTE-T'IL ??? JL E2012 < NON , PAS D'INTERET ... BSR AEXIST < TEST DU POINT M(X-1,Y+1). JANE E2012 < M(X-1,Y+1) N'EXISTE PAS OU < EST A 0. ADRI -1,Y < SI M(X-1,Y+1)=1 , ON PASSE < AU POINT M(X-1,Y). BSR APOINT < COLORIAGE DE M(X-1,Y) SUIVANT < 'APOINT'. JMP E2013 < VERS LE POINT SUIVANT ... E2012: EQU $ ADRI -1,Y < RETOUR A LA LIGNE (Y) ... JMP E2013 < VERS LE POINT SUIVANT. < < < T R A N S F O R M A T I O N M A T R I C I E L L E : < < E2021: EQU $ PSR B,X,Y < ON A ICI : < B=-1. BSR ATEST < TEST DU POINT M(X,Y). ADCR B < B=0 SI M(X,Y)=1. < < < T R A N S F O R M A T I O N D E S C O O R D O N N E E S : < < < METHODE DE TRANSFORMATION : < < SOIT : < MSX=SX*(2**XEQUIV)+RSX , < MSY=SY*(2**YEQUIV)+RSY , < < MSX ET MSY SONT LES COORDONNEES DU POINT M(X,Y) , < SX ET SY EN SONT LES COORDONNEES REDUITES , < RSX ET RSY LES RESIDUS ; XEQUIV ET YEQUIV < DETERMINENT LES CLASSES D'EQUIVALENCE DES < COORDONNEES DU PLAN. < < LA MATRICE DE TRANSFORMATION 'T' S'APPLIQUE < AUX COORDONNEES REDUITES : < (SXP,SYP)=T*(SX,SY) , < < LES COORDONNEES REDUITES SXP ET SYP < SONT EVENTUELLEMENT TRANSLATEES A < L'AIDE DES CONSTANTES DE TRANSLATION < TRX ET TRY INTRODUITES AVEC XEQUIV ET < YEQUIV : < (SXP,SYP)=(SXP,SYP)+(TRX,TRY) , < < LES COORDONNEES RESULTANTES X ET Y SONT : < X=SXP*(2**XEQUIV)+RSX , < Y=SYP*(2**YEQUIV)+RSY. < < PSR B < SAVE L'INDICATEUR D'ETAT. STX MSX < SAVE TEMPORAIRE X DE M(X,Y). STY MSY < SAVE TEMPORAIRE Y DE M(X,Y). < < DETERMINATION DES COORDONNEES REDUITES DE M(X,Y) : < LR X,A < A=COORDONNEE X. LX XEQUIV < CLASSE D'EQUIVALENCE DES X. SLRD 0,X < CALCUL DE LA CLASSE D'EQUI- < VALENCE DU X DE M(X,Y). STA SX < SAVE LA VALEUR REDUITE DE X. LR X,A < A=XEQUIV , SLRS 5 < RECUPERATION DE TRX : A=TRX. < (TRANSLATION DES X REDUITS) SLLD 0,X < A=RESIDU DE LA COORDONNEE X. STA RSX < ET SAVE LE REIDU DE X. LR Y,A < A=COORDONNEE Y DE M(X,Y). LX YEQUIV < ACCES CLASSE D'EQUIVALENCE DE Y. SLRD 0,X < CALCUL DE LA CLASSE D'EQUI- < VALENCE DE LA COORDONEE Y. STA SY < SAVE LA COORDONNEE REDUITE Y. LR X,A < A=YEQUIV , SLRS 5 < RECUPERATION DE TRY : A=TRY. < (TRANSLATION DES Y REDUITS) SLLD 0,X < A=RESIDU DE LA COORDONNEE Y. STA RSY < SAVE LE RESIDU DE Y. < < TRANSFORMATION PAR LA MATRICE T DES < COORDONNEES REDUITES DE M(X,Y) : < LA SX < COORDONNEE X REDUITE. MP A21 < B=A21*X. LR B,Y LA SY MP A22 < B=A22*Y. ADR B,Y LR Y,A < A=A21*X+A22*Y. LX YEQUIV < X=CLASSE D'EQUIVALENCE DES Y. SLLS 0,X < 'DEREDUCTION' DE Y. AD RSY < RESTAURATION DU RESIDU DE Y. AND NLIG < ET ENFIN , CALCUL MODULO LE < NBRE DE LIGNES PAR ECRAN. LR A,Y < Y=COORDONNEE Y DU POINT < TRANSFORME DE M(X,Y). LA SX < COORDONNEE X REDUITE. MP A11 < B=A11*X. LR B,X LA SY MP A12 < B=A12*Y. ADR B,X LR X,A < A=A11*X+A12*Y. LX XEQUIV < X=CLASSE D'EQUIVALENCE DES X. SLLS 0,X < 'DEREDUCTION' DE X. AD RSX < RESTAURATION DU RESIDU DE X. AND NPPL < ET ENFIN CALCUL MODULO LE NBRE < DE POINTS PAR LIGNE. LR A,X < X=COORDONNE DU POINT TRANFORME. PLR B < RESTAURE L'INDICATEUR D'ETAT. BSR ATEST < TEST DU POINT M(Y,X). ADCR B < B=0 SI M(X,Y)#M(Y,X). CPZR B JNE E2022 < B=-1 OU B=1 ; CELA SIGNIFIE < QUE M(X,Y)=M(Y,X) ; IL N'Y A < DONC RIEN A FAIRE ... BSR AINVER < SINON INVERSION DE M(Y,X). < < TRANSFORMATION INVERSE DES COORDONNEES : < LX MSX < RESTAURE COORDONNEE X DE M(X,Y). LY MSY < RESTAURE COORDONNEE Y DE M(X,Y). BSR AINVER < INVERSION DE M(X,Y). E2022: EQU $ PLR B,X,Y JMP E2003 < VERS LE POINT M(X,Y) SUIVANT. < < CAS OU LA BANDE COURANTE EST IGNOREE : < E2821: EQU $ LR X,A < X=NUMERO DE LA BANDE COURANTE. SLLS 3 LR A,Y < Y=NUMERO DE LA 1ERE LIGNE < DE LA BANDE COURANTE. JMP E2820 < VERS LE PASSAGE A LA BANDE < PRECEDENTE (SI EXISTE...). < < D E F I N I T I O N D E L A M A T R I C E < D E T R A N S F O R M A T I O N : < < NOTA : < IL EST POSSIBLE DE FAIRE GENERER < AU PROCESSEUR DES MATRICES IDEMPOTENTES , < C'EST-A-DIRE TELLES QUE : < M*M=I. < CES MATRICES SONT DE LA FORME : < -M22 (1-M22*M22)/M21 < M21 M22 < < A NOTER QUE LES MATRICES < +-1,0,0,+-1 CONVIENNENT AUSSI ... < DEF: EQU $ LYI 4 < Y=NBRE DE CARACTERES DEMANDES < POUR CHAQUE COEFFICIENT. < < ENTREE DES CLASSES D'EQUIVALENCE XEQUIV ET < YEQUIV AINSI QUE DES CONSTANTES DE TRANSLATION < TRX ET TRY : < < BITS0-2 : TRANSLATION A DROITE DES X REDUITS (TRX) , < BITS3-7 : CLASSE D'EQUIVALENCE DES X (XEQUIV) , < BITS8-10 : TRANSLATION VERS LE BAS DES Y REDUITS (TRY) , < BITS11-15 : CLASSE D'EQUIVALENCE DES Y (YEQUUIV). < < EN DONNANT '0000 , LES CLASSES < SONT PONCTUELLES ET NON TRANSLATEES !!! < LXI 5 < INDEX DU MESSAGE SUR LES < CLASSES D'EQUIVALENCE X,Y. BSR ACOEF < RECUPERATION DES CLASSES : < OCTET0(A)=CLASSE DE X , < OCTET1(A)=CLASSE DE Y. SLRD 16 < A=0 , B=CLASSES D'EQUIVALENCE. DV C256 < DECONCATENATION DES 2 OCTETS. STB YEQUIV < CLASSE D'EQUIVALENCE DE Y. STA XEQUIV < CLASSE D'EQUIVALENCE DE X. CP YEQUIV < LES CLASSES SONT-ELLES DE < 'MEME TAILLE' ??? JNE E2811 < NON , ON VA DONC RENTRER UNE < MATRICE QUELCONQUE ; EN EFFET < LORSQUE LES CLASSES NE SONT < PAS CARREES , LES MATRICES < IDEMPOTENTES NE DONNENT < PAS DES RESULTATS INVERSIBLES !!! CPI '0F < UNE TRANSLATION A-T'ELLE ETE < INTRODUITE , OU BIEN LA CLASSE < DEMANDEE EST-ELLE SUPERIEURE < A '0F ??? JG E2811 < UNE MATRICE IDEMPOTENTE NE < DONNERA PAS DE BONS RESULTATS !!! E2810: EQU $ IF TITV,X100,,X100 LAD MIDEM X100: VAL 0 BSR ADESIR < L'UTILISATEUR DESIRE-T'IL < UNE MATRICE IDEMPOTENTE OU PAS ??? CPI "N" < A CONTIENT LA REPONSE ... JE E2811 < IL DESIRE RENTRER LA MATRICE < ENTIERE (4 COEFFICIENTS). CPI "O" JNE E2810 < ERREUR , ON RECOMMENCE ... < < GENERATION D'UNE MATRICE IDEMPOTENTE : < LXI 2 < INDEX DU MESSAGE 'M22'. BSR ACOEF < ENTREE DU COEFFICIENT M22. STA SA22 < ET SAVE TEMPORAIRE. LXI 1 < INDEX DU MESSAGE 'M21'. BSR ACOEF < ENTREE DU COEFFICIENT M21. STA SA21 < ET SAVE TEMPORAIRE. E2816: EQU $ < ENTRY DE RECHERCHE D'UN JEU < DE M21,M22 QUI DONNENT UNE < MATRICE M ENTIERE. LA SA22 LR A,Y < Y=SA22. MP SA22 < B=SA22*SA22. LAI 1 SBR B,A < A=1-SA22*SA22. SARD 16 < ET CADRAGE SUR 32 BITS. DV SA21 < CALCUL DE (1-SA22*SA22)/SA21. CPZR B < LE RESTE EST-IL NUL ??? JE E2815 < OK , RESTE NUL , M EST ENTIERE ! LAD MERR BSR APRINT < SINON , ENVOI D'UN MESSAGE < D'ERREUR. IC SA22 < PUIS MODIFICATION DE SA22 , JMP E2816 < PUIS BOUCLAGE JUSQU'A TROUVER < LE BON COUPLE M21,M22 , OU < JUSQU'A UN ALT-MODE !!! E2815: EQU $ < OK , MATRICE ENTIERE !!! STA A12 < OK , GENERE A12. LA SA21 STA A21 < OK , GENERE A21. STY A22 < OK , GENERE A22. NGR Y,Y STY A11 < OK , GENERE A11=-A22. JMP E2803 < VERS L'ENTREE DU MODE DE < PARCOURS DE L'IMAGE. < < ENTREE D'UNE MATRICE QUELCONQUE : < E2811: EQU $ LXI 4 < X=NBRE DE COEFFICIENTS MATRICIELS < A ENTRER. < < ENTREE DES 4 COEFFICIENTS A11,A12,A21,A22 : < E2801: EQU $ BSR ACOEF < ENTREE DU COEFFICIENT MIJ. STA &AMAT < SI OK , ON RANGE MIJ DANS < LA MATRICE(X). JDX E2801 < AU COEFFICIENT SUIVANT. < < DEMANDE DE LA NATURE DU PARCOURS DE L'IMAGE : < E2803: EQU $ STZ DIAGON < A PRIORI PARCOURS IMAGE ENTIERE. IF TITV,X100,,X100 LAD MDIAG < MESSAGE D'INTERROGATION. X100: VAL 0 BSR ADESIR < ENTREE DES DESIRS UTILISATEUR. CPI "N" < A CONTIENT LE CARACTERE ENTRE. JE E2802 < OK , PARCOURS IMAGE ENTIERE. CPI "O" JNE E2803 < ERREUR , ON REINTERROGE ... IC DIAGON < PARCOURS DIAGONAL DEMANDE. E2802: EQU $ BR AINTER < VERS L'INTERROGATION UTILISATEUR. PAGE < < < E N T R E E U N C O E F F I C I E N T < D E L A M A T R I C E M : < < < ARGUMENT : < X=INDEX DU COEFFICIENT : < 4 : A11 , < 3 : A12 , < 2 : A21 , < 1 : A22. < < < RESULTAT : < A=VALEUR BINAIRE DU COEFFICIENT. < < COEF: EQU $ PSR X < SAVE LE DECOMPTE X. IF TITV,X100,,X100 LAD MAT BSR APRINT LAD MX-2 ADR X,A ADR X,A BSR APRINT < ENVOI D'UN MESSAGE MIJ=. LAD DEMFON SVC 0 < ENTREE DU COEFFICIENT MIJ. X100: VAL 0 BSR AHEX < CONVERSION BINAIRE DE MIJ. PLR X < RESTAURE LE DECOMPTE X. JNE COEF < ERREUR DE SYNTAXE HEXADECIMALE. RSR PAGE < < < D : C O M P T A G E P O I N T S / I M A G E : < < COMPT: EQU $ LBI 0 < INITIALISATION DU COMPTEUR. LX ALIMAG < X=NBRE DE MOTS/IMAGE. EE10: EQU $ PSR X < SAVE L'INDEX-MOT. LA &AIMAG < A=MOT COURANT DE L'IMAGE. EE12: EQU $ JAE EE11 < TOUS LES POINTS DE CE MOT ONT < ETE COMPTES, OU IL EST NUL. DBT < RECHERCHE D'UN POINT. ADRI 1,B < ET COMPTAGE. RBT 0,X < PUIS RAZ APRES PRISE EN COMPTE. JMP EE12 < AU POINT SUIVANT. EE11: EQU $ PLR X < RESTAURE L'INDEX MOT. JDX EE10 < PASSAGE AU MOT SUIVANT. < < EDITION DU NBRE DE POINTS (B) : < LYI 0+4 < X=0 (JDX), Y=BORNE SUP DE X. EE13: EQU $ LAI 0 < CLEAR LE REGISTRE A. SLLD 4 < RECUPERATION D'UN CHIFFRE HEXA. CPI 9 < TEST LETTRE/CHIFFRE. JLE EE14 < C'EST UN CHIFFRE. ADRI '41-'39-1,A < CAS DES LETTRES. EE14: EQU $ ADRI '30,A < CONVERSION ASCI. STBY &AREP < MISE DANS LE BUFFER. ADRI 1,X < PASSAGE AU CHIFFRE SUIVANT, CPR X,Y < SI EXISTE... JNE EE13 < OUI. LAD NPO BSR APRINT < EDITION DU NBRE DE POINTS/IMAGE. BR AINTER < VERS E410 (INTERRO UTILISATEUR). PAGE IF TITV,X100,,X100 < < < C O N V E R S I O N G R A P H I Q U E --> V I D E O < D ' U N P O I N T : < < < ARGUMENT : < POINT COURANT GRAPHIQUE DANS HY,LY,HX,LX. < < < RESULTAT : < X ET Y CONTIENNENT L'X ET L'Y DU POINT COURANT < VIDEO. < < CONV: EQU $ LA LY < LOW-Y POINT COURANT. SLRD 5 < RECUPERATION DES 5 BITS < SIGIFICATIFS DANS B. LA HY < HIGH-Y POINT COURANT. ANDI '1F < CONSERVATION DES 5 BITS < SIGNIFICATIFS. SLLD 5-DEDY < ET CONCATENATION AUX POIDS < FAIBLES AVEC UNE DIVISION < SIMULTANEE PAR DY. NGR A,A < INVERSION DU SIGNE DU AU FAIT < QUE L'AXE DES Y DES VISUS < MONTE , ALORS QUE CELUI D'UNE < IMAGE VIDEO DESCEND ... AD NLIG < LA COORDONNEE Y EST RENDUE>0. LR A,Y < COORDONNEE Y DU POINT COURANT. LA LX < LOW-X POINT COURANT. SLRD 5 < BITS SIGNIFICATIFS DANS B. LA HX < HIGH-X POINT COURANT. ANDI '1F < RECUPERATION DES 5 BITS < SIGNIFICATIFS. SLLD 5-DEDX < CONCATENATION DES POIDES FAIBLES < ET DIVISION SIMULTANEE PAR DX. LR A,X < COORDONNEE X POINT COURANT. RSR < ET C'EST TOUT. < < < A C C E S U N C A R A C T E R E G R A P H I Q U E : < < < ARGUMENT : < X=INDEX CARACTERE COURANT. < < < RESULTAT : < A=CARACTERE COURANT SUR 7 BITS , < X<--(X)+1. < < < SORTIE DIRECTE PAR E2 SI RENCONTRE DU R/C DE FIN < DE DESSIN , OU SI LA FIN DU BUFFR EST ATTEINTE. < < GET: EQU $ LBY &ABUF ANDI '7F < A=CARACTERE COURANT ET BIT0=0. ADRI 1,X < INDEX DU CARACTERE SUIVANT. CPI '0D < EST-CE LE R/C ??? JE E3 < OUI , FIN DE CONVERSION. XR A,X CP LG+2 < EST-ON AU BOUT DU DESSIN ??? XR A,X JGE E3 < OUI , C'EST COMME R/C. RSR < CAS DES RETOURS NORMAUX. < < FIN DE DESSIN : < E3: EQU $ ADRI -1,K < ANNULATION DU BSR D'APPEL. BR AFIN < VERS LA FIN DE CONVERSION. X100: VAL 0 PAGE IF ORDI-"T",XWOR%,,XWOR% < < < T R A C E D U S E G M E N T ( M 1 , M 2 ) : < < < FONCTION : < CETTE ROUTINE TRACE LE SEGMENT < M1M2 , TEL QUE : < M1(X1,Y1) , < M2(X2,Y2). < < < RESULTAT : < X=X2 , < Y=Y2. < < SEG: EQU $ LX X1 LY Y1 BSR APOINT < AFFICHAGE 1ER POINT. BSR ADICO < PARCOURS DICHOTOMIQUE DE (M1,M2). LX X2 LY Y2 BSR APOINT < AFFICHAGE 2EME POINT. RSR < < < P A R C O U R S D I C H O T O M I Q U E < D ' U N S E G M E N T : < < DICO: EQU $ LA X1 AD X2 SLRS 1 STA X < X=(X1+X2)/2. LA Y1 AD Y2 SLRS 1 STA Y < Y=(Y1+Y2)/2. < < TEST DE M PAR RAPPORT A M1 : < SB Y1 < A=Y-Y1. JANE E31 < CAS : M#M1. LA X SB X1 < A=X-X1. JAE E32 < CAS : M=M1. < < TEST DE M PAR RAPPORT A M2 : < E31: EQU $ LA Y SB Y2 < A=Y-Y2. JANE E30 < CAS M#M2 ET M#M1. LA X SB X2 < A=X-X2. JANE E30 < CAS : M#M2 ET M#M1. < < CAS OU M=M1 OU M=M2 : < E32: EQU $ LX X LY Y BSR APOINT < AFFICHAGE DU POINT M. RSR < CAS : M=M1 : ON ARRETE LA < DICHOTOMIE DESCENDANTE PROVISOI- < REMENT ... < < CAS OU M#M1 ET M#M2 : < E30: EQU $ LA X2 LB Y2 PSR A,B < SAVE LE POINT M2. LA X STA X2 LA Y STA Y2 < M2 <-- M. BSR ADICO < DICHOTOMIE DU NOUVEAU SEGMENT < (M1,M2). LX X2 LY Y2 BSR APOINT < AFFICHAGE DE M2 AU RETOUR. < D'UNE DICHOTOMIE. STX X1 < PUIS : STY Y1 < M1 <-- M2 ; ON DECALE L'ORIGINE < DU SEGMENT (M1,M2). PLR A,B STA X2 STB Y2 < RESTAURATION DU POINT M2. JMP DICO < ET ON REPREND LA DICHOTOMIE... XWOR%: VAL 0 PAGE IF ORDI-"S",XWOR%,,XWOR% < < T R A C E V I D E O D ' U N S E G M E N T E N S O L A R. < < (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !). < < < SEG: EQU $ < < PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE < (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE < DE L'IMAGE. < PSR A,B,X,Y PSR W < LR K,B ADRI 1,B < ZONE RECEPTRICE. LRM A,X,W WORD ENTIM < ZONE EMETTRICE (A SAUVER DANS LA PILE). WORD LENTIM < LONGUEUR EN-TETE IMAGE. WORD ENTIM < POUR BASER L'EN-TETE. MOVE ADRI LENTIM,K < MISE A JOUR DE 'K'. < < ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE, < ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO. < < CONVERSION DES COORDONNEES VIDEO EN COORDONNEES GRAPHIQUES. < LA X1 < X1 VIDEO. SLLS DEDX STA DEPX1,W < X1 GRAPHIQUE. LA X2 < X2 VIDEO. SLLS DEDX STA DEPX2,W < X2 GRAPHIQUE. LA Y1 < Y1 VIDEO. SB NLIG NGR A,A SLLS DEDY STA DEPY1,W < Y1 GRAPHIQUE. LA Y2 < Y2 VIDEO. SB NLIG NGR A,A SLLS DEDY STA DEPY2,W < Y2 GRAPHIQUE. < < POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT'). < STZ DEPMOD,W < MODE TRACE = 'RBT' A PRIORI. LA APOINT CP ARESET JE SEGRS < C'EST 'RBT'. CP AINVER JE SEGINV IC DEPMOD,W < C'EST 'SBT'. JMP SEGRS SEGINV: EQU $ DC DEPMOD,W < C'EST 'IBT'. SEGRS: EQU $ LRM A,X WORD ENTIM-ZERO*2 < ADRESSE OCTET EN-TETE IMAGE. WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE. STA STDKU+1 STX STDKU+2 LAD STDKU < DEMANDE INTERPOLATION ET AFFICHAGE. SVC 0 LRM A,X WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE. STA STDKU+1 STX STDKU+2 < < EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...). < ADRI -LENTIM,K < RESTAURATION DE 'K'. LR K,A ADRI 1,A < ZONE EMETTRICE. LRM B,X WORD ENTIM < ZONE RECEPTRICE (A RESTAURER). WORD LENTIM < LONGUEUR. MOVE < PLR W PLR A,B,X,Y RSR XWOR%: 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 : < Y=NBRE DE CARACTERES A DECODER (1 A 4) , IF TITV,X100,,X100 < REP=(Y) CARACTERES PRESUMES HEXA. X100: VAL 0 IF TITV,,X100, < ITEM1 CONTIENT 4 CARACTERES COURANTS PRESUMES HEXA. X100: VAL 0 < < < RESULTAT : < B=0 : OK , < =1#0 : CARACTERE ERRONNE , < INDICATEURS SUR LA VALEUR DE (B) , < A=VALEUR BINAIRE DES (Y) CARACTERES DE (REP) < SI B=0, OU LA VALEUR COURANTE SI B#0 SUR "S"... < < HEX: EQU $ LXI 0 < INDEX DU BUFFER DE REPONSE. LBI 0 < CLEAR LE REGISTRE B. E55: EQU $ IF TITV,X100,,X100 LBY &AREP < A=CARACTERE COURANT DU BUFFER. X100: VAL 0 IF TITV,,X100, BSR ASIMU < A=CARACTERE COURANT DE ITEM1. X100: VAL 0 ADRI -'30,A JAL E472 < ERREUR : CARACTERE NON RECONNU. CPI 9 < EST-CE UN CHIFFRE ??? JLE E51 < OUI , C'EST UN CHIFFRE. ADRI -'41+'39+1,A < NON. CPI 'A < VALIDATION. JL E472 < ERREUR : CARACTERE NON RECONNU. CPI 'F < VALIDATION. JG E472 < ERREUR : CARACTERE NON RECONNU. E51: EQU $ SCRS 4 < MISE DES 4 BITS EN TETE DE A. SCLD 4 < ET CONCATENATION A B. ADRI 1,X < PROGRESSION DE L'INDEX. CPR X,Y < EST-CE FINI ??? JNE E55 < NON , ON CONTINUE. LR B,A < A=VALEUR BINAIRE DE (REP). LBI 0 < B=0 : RETOUR OK. E473: EQU $ CPZR B < POSITIONNEMENT DES INDICATEURS. RSR < < RETOURS EN ERREUR : < E472: EQU $ IF ORDI-"S",XWOR%,,XWOR% LR B,A < A=VALEUR COURANTE... XWOR%: VAL 0 LBI 1 < B#0. JMP E473 < VERS LA SORTIE ... PAGE < < < E M I S S I O N M E S S A G E : < < < ARGUMENT : < A=@MOT DU MESSAGE. < < PRINT: EQU $ PSR C,X < SAVE L'@IMAGE VIDEO ET (X). LR A,C < C=@MOT DU MESSAGE. ADR A,A ADRI 1,A < A=@OCTET DU MESSAGE. STA DEMOUT+1 < MAJ DE DEMOUT. LBY 0,C < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 < MAJ DE DEMOUT. LAD DEMOUT SVC 0 < EMISSION DU MESSAGE. PLR C,X < RESTAURE L'@IMAGE VIDEO ET (X). RSR < RETOUR. < < < I N T E R R O G A T I O N U T I L I S A T E U R : < < IF TITV,X100,,X100 < ARGUMENT : < A=@MOT D'UN MESSAGE A L'UTILISATEUR. < A=0 : PAS DE MESSAGE A EMETTRE. < < < RESULTAT : < A=REPONSE UTILISATEUR (1 CARACTERE). < < DESIR: EQU $ JAE DESIR2 < PAS DE MESSAGE A EMETTRE. BSR APRINT < ENVOI D'UNE INVITATION. DESIR2: EQU $ IF ORDI-"S",XWOR%,,XWOR% LAD STDKU SVC 0 XWOR%: VAL 0 LAD DEMINT SVC 0 < LECTURE D'1 CARACTERE REPONSE. IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE E4003 < PAS DE STABILISATION IMAGE. WORD '1EC5 < EXECUTION MAITRE DE SP3. XWOR%: VAL 0 E4003: EQU $ < ON N'EST PAS SOUS :SYS ... LBY REP < A=REPONSE UTILISATEUR. RSR X100: VAL 0 IF TITV,,X100, < RESULTAT : < A=CARACTERE COURANT DE L'ITEM1 (REPONSE...) < (LES 'SPACE' SONT IGNORES) < < DESIR: EQU $ IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE E4003 < PAS DE STABILISATION IMAGE. WORD '1EC5 < EXECUTION MAITRE DE SP3. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LAD STDKU SVC 0 XWOR%: VAL 0 E4003: EQU $ < ON N'EST PAS SOUS :SYS ... DESIR1: EQU $ BSR ASIMU < A=CARACTERE COURANT DE L'ITEM1. CPI " " JE DESIR1 < LES 'SPACE' EN REPONSE SONT < DES ELEMENTS NEUTRES , ET < IGNORES .... RSR X100: VAL 0 PAGE < < < A C C E S A U S G N : < < < ARGUMENT : < A=NVP D'ACCES. < < < RESULTAT : < X=CONDITION DE RETOUR DU SGN. < < GOSGN: EQU $ STBY SGN LAD SGN SVC 0 < ACCES AU SGN. RSR IF TITV,,X100, PAGE < < < B U F F E R S E C T E U R E T P I L E : < < STACK: EQU $ BUFFER: EQU STACK+SSTACK SECTOR: EQU BUFFER ZSECTX: VAL SECTOR-ZERO*2 ZSECT2: EQU ZERO+ZSECTX < @OCTET DU BUFFER SECTEUR. X100: VAL 0 PAGE < < < I M P L A N T A T I O N : < < X14: VAL $-ZERO+2 < TAILLE DU PROGRAMME +2. X14: VAL SIZE-X14 < ESPACE MEMOIRE LIBRE. X15: EQU ZERO+X14 < ERREUR D'ASSEMBLAGE SI LE < PROGRAMME RECOUVRE L'UN DES < BUFFERS D'IMAGE. X12: EQU ZERO+PILE-LTNI-LTNI X10: VAL X12-$ ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI MAUVAISE < IMPLANTATION ... DZS X10+1 IF TITV,,X100, X21: VAL SECTOR-ZERO+128 < TOP BUFFER SECTEUR. X21: VAL SIZE+LTN-X21 ZEROW: EQU ZERO+X21 < ERREUR VOLONTAIRE D'ASSEMBLAGE < SI LE TOP EST EN RECOOUVREMENT < DU CORPS DE L'ITEM2. X100: VAL 0 PAGE EOT #SIP GEN PROCESSEUR#