< COMMENTAIRE UNIQUEMENT DESTINE A PERMETTRE L'ACCES PAR 'vi' (introduit le 20061123170648). INITS: VAL 0 < INITIALISER LA ZONE SCRATCH DK. INITS: VAL 1 < NE PAS INITIALISER ZONE SCRATCH. IDP "' A' (EX-TI SOLAR)" IDP "RELEASE 09 - 10/06/80" IDP "IMAGES VIDEOS" PAGE EOT #SIP DEFINITION CMS5# PAGE NMPROC: VAL " A" < NOM DU PROCESSEUR. EOT #SIP DEF PROCESSEUR# 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... EOT #SIP IMAGE 256# 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 ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (INTERPOLATION VIDEO < PAR CMS5). < < 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 PAGE < < B R A N C H E ' A ' D E S C < < CE SOUS-PROGRAMME DE SC, DIRECTEMENT TIRE DE TI, EST CHARGE < PAR CELUI-CI JUSTE DERRIERE L'IMAGE RESIDENTE, ET APPELE PAR UN < SIMPLE 'BSR'. < < ARGUMENTS : < - 'B' INDEX NOM IMAGE ARGUMENT. < - 'X' RELAI VERS L'ITEM COURANT. < - 'Y' INDEX CARACTERE COURANT. < < RESULTAT : < - 'A' DE RETOUR = NOUVEL INDEX CARACTERE COURANT. < PROG $EQU ZERO XWOR%: VAL IMAG-ZERO+LIMAG < POUR S'IMPLANTER DERRIRE L'IMAGE < RESIDENTE. DZS XWOR% IMPL: EQU $ < IMPLANTATION ' A'. WORD NMPROC ASCI " " WORD '04D0 WORD '1F00 WORD IMAGE GOA: EQU $ < GO OVERLAY ' A'. LRP L BR -1,L PAGE < < < L O C A L : < < LOCAL LOC: EQU $ LOCS: EQU $ < < PARTIE DU LOCAL A SAUVEGARDER A LA PREMIERE ENTREE DANS ' A' < ET A REINITIALISER A CHAQUE NOUVELLE ENTREE DANS ' A'. < < CETTE PARTIE VA DE 'LOCS' --> 'FLOCS'. < NOMARG: WORD -1 < MEMORISE DANS LE CAS D'UN APPEL < PAR 'SC', L'INDEX EVENTUEL DE < L'IMAGE APPELEE PRECEDEMMENT < PAR 'SC' LUI-MEME... 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. < < 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. < < ACCES 'DKU' 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. STDKU: WORD '8A01 < STABILISATION IMAGE. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD 0 < SELECTION COULEUR. FLOCS: EQU $ < FIN DE LA ZONE DU LOCAL A SAUVEGARDER. 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. DMTRAV: WORD '8A00 < POUR REINITIALISER 'RWDKU'. WORD IMAG-ZERO*2 WORD LIMAG*2 FDMTRV: EQU $ XNQSPI: VAL LIMAG+127/128+2/3 INCR: WORD LIMAG/128*3/3 < VALEUR IMPLICITE DE L'INCREMENTATION < AUTOMATIQUE POUR ACCES DKU (MODI- < FIABLE PAR LA COMMANDE "K"). QC: WORD 3 < QUANTA COURANT D'ACCES A DKU, < 3 A PRIORI. LMSQC: WORD 3*128 < LONGUEUR MOTS D'UN SECTEUR DKU EN < QUANTA COURANT (3 A PRIORI). < < BUFFERS ET MESSAGES : < 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). MIT1: BYTE 7;'6D ASCI "!ITEM1" MERR: BYTE 3;'6D;"?";"?" < < DEMANDES A CMS4 : < DEMOUT: WORD '0202 < EMISSION D'UN MESSAGE. WORD 0 < @OCTET DU MESSAGE. WORD 0 < LONGUEUR DU MESSAGE. 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 DEMCCI: WORD '0001 < RETOUR AU CCI. SLEEP: WORD '0005 < DEMANDE DE TEMPORISATION. WORD 0 WORD 2 < POUR 2 SECONDES .... SGN: WORD '0002 < ACCES SGN POUR LES IMAGES. WORD NOM-ZERO*2 WORD IMAG-NOM+LIMAG*2 WORD EOT-NOM*2 RDK: WORD '0C00 < LECTURE SCRATCH DU DISQUE. SECT2: WORD ZSECT2 < @OCTET DU SECTEUR. WORD 256 < 1 SECTEUR=256 OCTETS. WORD 0 < @SECTEUR COURANT. WDK: WORD '0C02 < ECRITURE SCRATCH DU DISQUE. WORD ZSECT2 WORD 256 < 1 SECTEUR=256 OCTETS. WORD 0 < NUMERO DU SECTEUR COURANT. < < CONSTANTES DE CONVERSION GRAPHIQUE --> VIDEO : < 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 : < SAVKSC: DZS 1 < SAVE 'K' DE SC. SAVKA: DZS 1 < 'K' DE ' A'. 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. AEOT: WORD EOT < ADRESSE DE L'EOT A PRIORI. ALONG: WORD LONG < ADRESSE DE L'INDICATEUR VIDEO. 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. 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 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. ADEF: WORD DEF < DEFINITION DE LA MATRICE DE < TRANSFORMATION. ACOEF: WORD COEF < ENTREE 1 COEEFICIENT MATRICE. ASEG: WORD SEG < TRACE DU SEGMENT (M1,M2). ARETSC: WORD RETSC < RETOUR VERS SC. APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE. ADESIR: WORD DESIR < QUESTION-REPONSE UTILISATEUR. AHEX: WORD HEX < CONVERSION HEXA --> BINAIRE. AHEX4: WORD HEX4 < ENTREE / CONVERSION DE 4 CHIFFRES HEXA. 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. < < 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. < < CONSTANTES : < NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES PAR ITEM. IEG: WORD 0 < INDEX COURANT DE L'ITEM1. ALIMAG: WORD LIMAG < NBRE DE MOTS OCCUPES PAR L'IMAGE. LO3IM: WORD LIMAG*2*3 < LONGUEUR OCTETS DE 3 IMAGES. 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. XWOR%1: VAL 4 TEMPO: WORD XWOR%1*2 < TEMPORISATION PAIRE DE CLIGNOT- < TEMENT DU PSEUDO-CURSEUR TV. IMAG2: WORD IMAG-ZERO*2 < @OCTET DE L'IMAGE VIDEO. < < COULEURS SOLAR. < MCOOL: WORD 0 < CUMUL DES ARGUMENTS ENVOYES A 'CU3'. AMCOOL: WORD MCOOL 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. IPRAP: WORD 1 < INDICATEUR PREMIER APPEL DE ' A' : < = 1 : PREMIER APPEL, < = 0 : SINON. 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 < < < 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 ARETSC < RETOUR VERS SC. < < < 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 PAGE RETSC: EQU $ < < R E T O U R V E R S S C. < < (NOTER QU'ON LUI RENVOIE 'A' = NOUVEL INDEX CARACTERE < COURANT). < < < 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 < < RESTAURATION DES REGISTRES. < LA SAVKA LR A,K < K DE ' A'. PLR W PLR B,X,Y,C < < RESTAURATION DU 'K' DE 'SC'. < LA SAVKSC LR A,K < < RENVOI DU NOUVEL INDEX CARACTERE COURANT. < LA IEG RSR < ET VOILA. 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 : < 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). < < < 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 : < < IMAGE: EQU $ LR K,A < 'K' DE SC. LRM L,K WORD LOC+'80 < BASE DU LOCAL DE ' A'. WORD STACK-1 < PILE DE ' A'. < < SI C'EST LE PREMIER APPEL DE ' A' (CHARGEMENT INITIAL PAR 'SC', IL FAUT < SAUVER LE LOCAL INITIAL ('LOCS' --> 'FLOCS') DANS LA ZONE DE SAUVEGARDE < 'LOCBIS'; < SI CE N'EST PAS LE PREMIER APPEL, IL FAUT RESTAURER LA ZONE 'LOCS' --> 'FLOCS' < INITIALE A PARTIR DE 'LOCBIS'. < PSR A,B,X LRM A,B,X < PREPARATION DU MOVE. WORD LOCBIS WORD LOCS WORD FLOCS-LOCS CPZ IPRAP < TEST PREMIER APPEL. STZ IPRAP < CE NE LE SERA PLUS. JE IMAGE1 < C'EST LE PREMIER APPEL : SAUVER 'LOCS' DANS 'LOCBIS'. XR A,B < MOVE 'LOC' --> 'LOCBIS'. < SINON, FAIRE 'LOCBIS' --> 'LOCS'. IMAGE1: EQU $ MOVE < ET VOILA... PLR A,B,X STA SAVKSC < SAVE LE 'K' DE SC. < SAVE DES AUTRES REGISTRES DE 'SC' DANS LA PILE DE ' A'. PSR B,X,Y,C PSR W LR K,A STA SAVKA < 'K' DE ' A'. LRM C,W < INITIALISATION DES BASES. WORD IMAG < IMAGE. WORD BRANCH < SANS DOUTE INUTILE. < < EXPLOITATION DES ARGUMENTS. < STB NOMARG < INDEX NOM IMAGE ARGUMENT EVENTUELLE. STX AI1 < ITEM COURANT. STY IEG < INDEX CARACTERE COURANT. < < 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 $ 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'). BSR AINOM < RECUPERATION DU NOM DE L'2MAGE. 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 $ STZ INIT < REINITIALISATION IMAGE A PRIORI. 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. 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 , < G : VALIDATION IMAGE SANS LOAD < DANS LE CAS DE L'APPEL PAR 'SC' , < F : RETOUR A 'GE'. < 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 RETSC < RETOUR A 'SC'. CPI "G" JE E2 < VALIDATION IMAGE SANS LOAD (CF: SC). E4501: EQU $ < ERREUR DE COMMANDE. < < 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 : < < < CONVERSION HEXADECIMALE --> BINAIRE : < BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. 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. JMP E2 < VERS LE 2EME NIVEAU D'INTERRO... < < < 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 $ BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. JNE E2101 < ERREUR DE SYNTAXE. STA PATS < MEMORISATION DES SECTEURS 0 A 'F. E2102: EQU $ 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 $ 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 "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 E790XX < 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 !!! CPI "B" JE EB00 < "BASCULEMENT" DU MODE D'ACCES A DKU < "DIRECT"/"INDIRECT", ET DEFINITION < LONGUEUR D'ECHANGE SI PASSAGE EN MODE < "DIRECT" STACKS RVB <--> DKU. CPI "Q" < "QUANTA" D'ACCES QUEL QUE SOIT LE < MODE D'ACCES UTILISE. JE EQ00 CPI "@" < ADRESSE DANS STACK RVB POUR ACCES DKU < EN MODE DIRECT. JE EA00 CPI "K" < DEFINITION D'INCREMENT AUTOMATIQUE < POUR LES ACCES DKU. JE EK00 CPI "\" JE EX00 < CHANGEMENT DES BORNES DEFINISSANT LA < ZONE DKU UTILISABLE. 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... E410K: JMP E410 < VERS UNE NOUVELLE INTERROGATION. 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. JNE E102J < ERREUR DE STORE ... JMP E410 < VERS LA DEMANDE DES DESIRS < DE L'UTILISATEUR. < < R E T O U R A ' G E ' : < E420: EQU $ BR ARETSC < 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 E410K < 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 $ LAI '04 < CODE DU NOP AFIN DE NE PAS < MELANGER L'IMAGE SCRATCH AVEC < L'IMAGE COURANTE LORS DU RAPPEL. 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 : < BSR AINOM < RECUPERATION NOM DANS ITEM1. < < OPERATION LOGIQUE ENTRE LES 2 IMAGES : < BR AOPER < VERS L'OPERATION LOGIQUE ... E790XX: JMP E790X < SAUT > 128 ! EQ00: JMP EQ00X < SAUT > 128 ! EX00: JMP EX00X < SAUT > 128 ! EK00: JMP EK00X < DEPLACEMENT > 128 ! < < C H A N G E M E N T D U M O D E D ' A C C E S A D K U. < < LORS DE CETTE COMMANDE "B" (COMME "BASCULEMENT !), ON SERT UNE < LONGUEUR OCTETS QUI PEUT ETRE NULLE, SUR 0 OU 4 CHIFFRES HEXA. < < - SI LONGUEUR NULLE, ON REVIENT EN MODE D'ACCES "INDIRECT" DKU. < - SI LONGUEUR NON NULLE, ELLE EST VALIDEE (PAIRE, ET 0<=L<='6000) < ET ON PASSE EN MODE D'ACCES DKU "DIRECT" (C-A-D STACKS RVB <--> DKU) < ET L'ADRESSE STACK RVB RECOIT IMPLICITEMENT 0 (ELLE EST MODIFIABLE < PAR LA COMMANDE "A-ROND"). < EB00: EQU $ BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. JE EB01 < 4 CHIFFRES HEXA RECONNUS. CPZR X JNE ERROR EB03: EQU $ LRM A,B,X < REPONSE VIDE OU NULLE, RETOUR ANCIEN MODE WORD DMTRAV < DEMANDE 'RWDKU' MODE "INDIRECT". WORD RWDKU WORD FDMTRV-DMTRAV MOVE < NOTA: ON NE TOUCHE NI A L'ADRESSE < SECTEUR COURANTE, NI A L'INCREMENT < COURANT. JMP E410J < VERS COMMANDE SUIVANTE. EB01: EQU $ < PASSER EN MODE D'ACCES "DIRECT" : < STACK RVB <--> DKU. < VALIDATION LONGUEUR. JAE EB03 < REPONSE NULLE, RETOUR ANCIEN MODE. JAL ERROR < NEGATIVE. TBT 15 JC ERROR < IMPAIRE. CP LO3IM JG ERROR < TROP GRANDE. STA RWDKU+2 < LONGUEUR DEMANDEE. < PREMIER MOT DE LA DEMANDE. LRM B WORD '8A04 < FONCTION = LECTURE Q3 A PRIORI. LA QC < QUANTA COURANT. CPI 3 JE EB02 < C'EST BON. SBT 16+12 < SET BIT QUANTA 1. EB02: EQU $ STB RWDKU < PREMIER MOT DE LA DEMANDE. < ADRESSE STACK RVB = 0 IMPLICITEMENT (MODIFIABLE PAR COMMANDE "@"). STZ RWDKU+1 < NOTA: < ADRESSE SECTEUR COURANTE ET INCREMENT COURANT RESTENT INCHANGES. JMP E410J < VERS COMMANDE SUIVANTE. < < D E F I N I T I O N / R E D E F I N I T I O N A D R E S S E < < D A N S S T A C K R V B ( M O D E " D I R E C T " D K U ). < < CETTE COMMANDE ( A-ROND) N'EST ACCEPTEE QUE SI LE MODE COURANT D'ACCE < D'ACCES A DKU EST BIEN LE MODE DIRECT STACK RVB <--> DKU. < < DE PLUS CETTE ADRESSE DOIT : < - ETRE EXPRIMEE SUR 0 OU 4 CHIFFRES HEXA, EN OCTETS. < - ETRE PAIRE ET POSITIVE, < - ETRE <= 'LO3IM' - LONGUEUR DEMANDEE (COMMANDE "B"). < EA00: EQU $ < VERIFIER QUE L'ON EST BIEN EN MODE DIRCT STACK RVB <--> DKU. LA RWDKU TBT 13 JNC ERROR < ACQUERIR L'ADRESSE SPECIFIEE. BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. JE EA01 < 4 CHIFFRES HEXA RECONNUS. CPZR X JNE ERROR < REPONSE VIDE, 0 IMPLICITE. LAI 0 EA01: EQU $ JAL ERROR < NEGATIVE. TBT 15 JC ERROR < IMPAIRE. LR A,B LA LO3IM < LONGUEUR DE 3 IMAGES (OCTETS). SB RWDKU+2 < - LONGUEUR DEMANDEE. CPR B,A < VALIDATION. JL ERROR STB RWDKU+1 < ADRESSE DEMANDEE. JMP E410J < VERS COMMANDE SUIVANTE. ERRORX: JMP ERROR < SAUT > 128 ! < < D E F I N I T I O N / R E D E F I N I T I O N I N C R E M E N T < < P O U R A C C E S D K U. < < L'INCREMENT EST UN NOMBRE QUELCONQUE DE Q-SECTEURS, EXPRIME < SUR 0 OU 4 CHIFFRES HEXA. < < CET INCREMENT EST VALABLE QUEL QUE SOIT LE MODE D'ACCES DKU UTILISE. < EK00X: EQU $ BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. JE EK01 < 4 CHIFFRES HEXA RECONNUS. CPZR X JNE ERROR LAI 0 < REPONSE VIDE, 0 IMPLICITE. EK01: EQU $ STA INCR < INCREMENT COURANT. E410L: JMP E410J < VERS COMMANDE SUIVANTE. EQ00X: EQU $ < < S P E C I F I C A T I O N Q U A N T A D ' A C C E S A D K U. < < COMMANDE "Q" SUIVIE DE "1" OU "3". < BSR ADESIR < QUANTA DEMANDE. ADRI -"0",A CPI 1 JE EQ01 < QUANTA 1 DEMANDE. CPI 3 JNE ERRORX < QUANTA 3 DEMANDE. CP QC < EST-ON DEJA EN QUANTA 3 ? JE E410L < OUI, RIEN A FAIRE... < MISE A JOUR QUANTA COURANT. STA QC < RAZ BIT QUANTA 1 DE LA DEMANDE DKU. LA RWDKU RBT 12 STA RWDKU < DIVISER ADRESSE SECTEUR COURANTE PAR 3. LA RWDKU+3 SLRD 16 DV QC STA RWDKU+3 < DIVISER VALAD1 ET VALAD2 PAR 3 (BORNES). LA VALAD1 SLRD 16 DV QC STA VALAD1 LA VALAD2 SLRD 16 DV QC STA VALAD2 < DIVISER L'INCREMENT COURANT +/- 2 PAR 3. LA INCR JAGE EQ04 ADRI -2,A JMP EQ05 EQ04: EQU $ ADRI 2,A EQ05: EQU $ SARD 16 DV QC STA INCR < JMP EQ06 < VERS MISE A JOUR DE 'LMSQC'. E790X: JMP E790 < SAUT > 128 < QUANTA 1 DEMANDE. EQ01: EQU $ CP QC < EST-ON DEJA EN QUANTA 1 ? JE E410L < OUI, RIEN A FAIRE. < SET BIT QUANTA 1 DANS LES DEMANDES DKU 'DMTRAV' ET 'RWDKU'. LA DMTRAV SBT 12 STA DMTRAV LA RWDKU SBT 12 STA RWDKU < MULTIPLIER PAR 3 L'ADRESSE SECTEUR COURANTE. LA RWDKU+3 MP QC STB RWDKU+3 < NOTER QUE SI L'ADRESSE SECTEUR SE TROUVE HORS DES LIMITES 'VALAD1','VALAD2' < ELLE SERA VALIDEEE AVANT LE PROCHAIN ACCES DKU ! < < MULTIPLIER PAR 3 'VALAD1' ET 'VALAD2'. LA VALAD1 MP QC LA M0FFF < NE PAS DEPASSER '0FFF ! CPR A,B JLE EQ07 XR A,B < PRENDRE '0FFF. EQ07: EQU $ STB VALAD1 LA VALAD2 MP QC LA M0FFF < IDEM... CPR A,B JLE EQ08 XR A,B EQ08: EQU $ STB VALAD2 < MULTIPLIER L'INCREMENT PAR 3. LA INCR MP QC STB INCR < ET, ENFIN, QUANTA COURANT RECOIT 1 ! LAI 1 STA QC EQ06: EQU $ < METTRE A JOUR 'LMSQC' (LONGUEUR MOTS SECTEUR EN QUANTA COURANT). LA QC SLLS 7 STA LMSQC JMP E410L < VERS COMMANDE SUIVANTE. < < C H A N G E M E N T D E S B O R N E S D E F I N I S S A N T < < L ' E S P A C E D K U A C C E S S I B L E. < < COMMANDE "\", SE PRESENTANT COMME SUIT: < < \XXXX\YYYY\ < < AVEC XXXX = ADRESSE PREMIER SECTEUR AUTORISE ET < YYYY = ADRESSE DERNIER SECTEUR AUTORISE. < EX00X: EQU $ BSR AHEX4 < ADRESSE PREMIER SECTEUR AUTORISE. JNE ERRORX PSR A BSR ADESIR < ON ATTEND LE "\" DE SEPARATION. CPI "\" PLR A JNE ERRORX PSR A BSR AHEX4 < ADRESSE DERNIER SECTEUR AUTORISE. JNE ERRORX PSR A BSR ADESIR < ON ATTEND LE "\" DE FIN. CPI "\" PLR A,B < 'A' = DEBUT, 'B' = FIN. JNE ERRORX < ON TRANSFORME CES ADRESSES SECTEUR EN ADRESSES 16-SECTEURS, ET < ON LES VALIDE. SLRS 4 XR A,B SLRS 4 CPR A,B JG ERRORX STA VALAD2 STB VALAD1 JMP E410L < < < 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 : < < < 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. < < < COMMANDES RECONNUES : < G : VALIDATION DE L'INTERACTION SUR '0B < JUSQU'A LA PROCHAINE COMMANDE < PRIMAIRE, < 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. JMP E410L < VERS L'INTERRO. UTILISATEUR. 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 : < LAI 'FF STBY CURSOR < A PRIORI : PAS D'INTERACTION !!! E770: EQU $ LAD STDKU SVC 0 < VISUALISATION AVANT LE CURSEUR... 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 : < 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 $ PSR X LAD STDKU SVC 0 < EXECUTION MAITRE DE SP3. PLR X 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. CPI 'FF < Y-A-T'IL EU INTERACTION ??? JNE E6000 < OUI , (A) EST BON , BSR ADESIR < NON : SIMULATION DE L'ENTREE ... E6000: EQU $ 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. CPI "G" < VALIDATION INTERACTION '0B ??? JE VALCU < ET OUI... 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 ... < < 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. < < 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 $ 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 : < BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA. < CONTENUS DANS REP. < (ET DANS L'ITEM1 POUR 'TI') 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... < EFFECTUER L'INCREMENTATION AUTOMATIQUE POUR ACCES DKU. PSR A LA RWDKU+3 < ADRESSE SECTEUR COURANTE. AD INCR < + INCREMENT. STA RWDKU+3 < NOUVELLE ADRESSE SECTEUR. PLR A < RAPPEL, ICI, 'A' = '000E OU '000F. JMP COOL1 < VERS ACCES DKU. E475X: EQU $ < < VOYONS S'IL S'AGIT D'UN ORG DE TYPE 'EXXX OU 'FXXX (ACCES DKU AVEC SPECI- < FICATION DE L'ADRESSE SECTEUR), AUQUEL CAS IL NOUS FAUT ENCORE UN CHIFFRE < HEXA QUI NOUS DONNERA LE DERNIER CHIFFRE DE L'ADRESSE SECTEUR DKU DONT < NOUS N'AVONS POUR L'INSTANT QUE LES 3 PREMIERS CHIFFRES. < SLRD 12 CPI 'E < EST-CE 'E OU 'F ? JL E475X1 < OUI, ALLONS-Y POUR LE DERNIER CHIFFRE... SLRD 4 < 'B' = 'EXXX OU 'FXXX. PSR B < A CAUSE DE BSR AHEX... LYI 1 BSR AHEX PLR B JNE ERRORY SLLS 12 SCLD 4 < 'B' = ADRESSE SECTEUR, 'A' = 'E OU 'F. STB RWDKU+3 < MISE A JOUR ADRESSE SECTEUR DANS LA < DEMANDE DKU. JMP COOL1 < VERS ACCES DKU. ERRORY: BR AERR < SAUT > 128 ! E475X1: EQU $ SLLD 12 < DEFAIRE CE QU'ON A FAIT... < < 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. JGE CROTA < C'EST PEUT-ETRE UNE MODIFICATION DES < REGISTRES DE COULEUR SI BIT1=1... 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 ... OPERXX: JMP OPER < SAUT > 128 ! < < < 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=EXXXX / ORG=E; ECRITURE SUR DKU, < ORG=FXXXX / ORG=F; LECTURE DKU. < < DANS TOUS LES CAS (INCREMENTATION AUTOMATIQUE, OU SPECIFICATION < DE L'ADRESSE SECTEUR EN CLAIR), ON A ICI: < < - ADRESSE SECTEUR DE LA DEMANDE DKU A JOUR (MAIS PAS VALIDEE), < - 'A' = '000E OU '000F (ECRITURE / LECTURE). < COOL1: EQU $ TBT 15 < SENS DE L'ECHANGE. 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... < < VALIDATION DE L'ADRESSE SECTEUR DE LA DEMANDE PAR RAPPORT AU BORNES < 'VALAD1' ET 'VALAD2', EN TENANT COMPTE DE LA LONGUEUR DE L'ECHANGE ET < DU QUANTA COURANT. < LA RWDKU+2 < LONGUEUR OCTETS ECHANGE. SLRS 1 < LONGUEUR MOTS. AD LMSQC < + LONGUEUR MOTS SECTEUR EN QUANTA ADRI -1,A < COURANT -1. SLRD 16 DV LMSQC < --> NOMBRE DE SECTEURS NECESSAIRE < A L'ECHANGE. ADRI 'F,A < ON ARRONDIT... SLRD 16+XDKU < 'B' = UN NOMBRE DE 16-SECTEURS EN Q1/Q3. LA RWDKU+3 < ADRESSE SECTEUR DE LA DEMANDE. SLRS XDKU < EN 16 SECTEURS Q1/Q3. CP VALAD1 < VALIDATION EN BAS... JL ERRORY ADR B,A CP VALAD2 < VALIDATION EN HAUT... JG ERRORY < ALLONS-Y POUR L'ECHANGE... LAD RWDKU SVC 0 < ENVOI DE LA DEMANDE... JNE OPERXX < ERREUR !!! BR AINTER < COMMANDE SUIVANTE... < 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 $ 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. 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. BSR AHEX < CONVERSION BINAIRE DE MIJ. PLR X < RESTAURE LE DECOMPTE X. JNE COEF < ERREUR DE SYNTAXE HEXADECIMALE. RSR PAGE < < 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 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) , < ITEM1 CONTIENT 4 CARACTERES COURANTS PRESUMES HEXA. < < < 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 $ BSR ASIMU < A=CARACTERE COURANT DE ITEM1. 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 $ LR B,A < A=VALEUR COURANTE... LBI 1 < B#0. JMP E473 < VERS LA SORTIE ... < < E N T R E E / C O N V E R S I O N D E 4 C H I F F R E S < < H E X A. < < < ATTENTION ! < < DETRUIT LE REGISTRE 'Y' ! < HEX4: EQU $ LYI 4 < 4 CHIFFRES HEXA DEMANDES. BR AHEX < ET VOILA ... 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 : < < < RESULTAT : < A=CARACTERE COURANT DE L'ITEM1 (REPONSE...) < (LES 'SPACE' SONT IGNORES) < < DESIR: EQU $ LAD STDKU SVC 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 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 < < F I N D U C O D E D E ' A '. < < (POUR SA GENERATION EN TANT QU'ITEM, NE PAS CONFONDRE AVEC < L'ESPACE MEMOIRE QU'IL OCCUPERA, CF CI-APRES). < FINCOD: EQU $ < < L O C A L ' B I S ' D E ' A ' < LOCBIS: DZS FLOCS-LOCS < POUR SUVEGARDER LA ZONE DU LOCAL INITIAL < A SUVEGARDER. 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. $EQU BUFFER+128 < POUR VALIDATION TAILLE MEMOIRE DE ' A'. PAGE < < < I M P L A N T A T I O N : < < FIMPL: EQU $ < FIN D'IMPLANTATION. XWOR%1: VAL FIMPL-IMPL < ESPACE MEMOIRE TOTAL DE ' A'. IF XWOR%1-'800-'10,XWOR%,XWOR%, < ON A DROIT A 2K - '10 MOTS. IF ERREUR D'IMPLANTATION ( > 2K MOTS). XWOR%: VAL 0 XWOR%1: VAL FINCOD-IMPL < TAILLE DU CODE SEUL DE ' A' (POUR SA < GENERATION EN TANT QU'ITEM). XWOR%2: VAL ZERO-BRANCH+PILE-LTNI-LTNI DZS XWOR%2-XWOR%1 < POUR COMPATIBILITE AUTRES PROCESSEURS. PAGE < < < G E N E R A T I O N D U P R O C E S S E U R : < < LOCAL XXXLOC: EQU $ XXXCCI: WORD 1 < RETOUR AU CCI. XXXMOK: BYTE '6D;"O" ASCI "K!" < MESSAGE 'OK!'. XXXDOK: WORD '0202 < ENVOI DU MESSAGE 'OK'. WORD XXXMOK-ZERO*2 WORD 4 XXXSGN: WORD '8402 < DEMANDE DE GENERATION DU PROCESSEUR. WORD IMPL-ZERO*2 < @OCTET DE LA BRANCHE. WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 < POUR COMPATIBILITE AUTRES < PROCESSEURS DE SMC. WORD -1 NLS NOMOV1: @ IF '0006='F700,,XWOR%, LST XXXOV1: WORD DEBOV1 < ADRESSE DEBUT OVERLAY 1. NLS XWOR%: VAL 0 NOMOV2: @ IF '0006='F700,,XWOR%, LST XXXOV2: WORD DEBOV2 < ADRESSE DEBUT OVERLAY 2. NLS XWOR%: VAL 0 LST XXXPIL: DZS 2 < PILE DE GENERATION. PROG USE L,XXXLOC+'80 WORD XXXLOC+'80 < VALEUR INITIALE DE LA BASE L. XXXGEN: EQU $ LRP L < INITIALISATION DE LA BASE L. LA -1,L LR A,L LAD XXXPIL-1 < INITIALISATION DE L'ADRESSE DE PILE. LR A,K NLS NOMOV2: @ IF '0006='F700,,XWOR%, LST < < TENTATIVE DE GENERATION DE L'OVERLAY 2. < XXXGN4: EQU $ LB XXXSGN+1 LA XXXOV2 < PLACER SON ADRESSE DE DEBUT. SLLS 1 STA XXXSGN+1 LAD XXXSGN < GENERATION. SVC 0 STB XXXSGN+1 JE XXXGN5 < OK ... < < ERREUR - L'OVERLAY EXISTE DEJA. < LAD XXXCCI < RETOUR CCI. SVC 0 JMP XXXGN4 < ET REESSAI. < < BONNE GENERATION. < XXXGN5: EQU $ LAD XXXDOK < ENVOI MESSAGE OK. SVC 0 LAD XXXCCI < ET RETOUR AU CCI. SVC 0 NLS XWOR%: VAL 0 NOMOV1: @ IF '0006='F700,,XWOR%, LST < < TENTATIVE DE GENERATION DE L'OVERLAY 1. < XXXGN7: EQU $ LB XXXSGN+1 LA XXXOV1 < PLACER SON ADRESSE DE DEBUT. SLLS 1 STA XXXSGN+1 LAD XXXSGN < GENERATION. SVC 0 STB XXXSGN+1 JE XXXGN8 < OK ... < < ERREUR - L'OVERLAY EXISTE DEJA. < LAD XXXCCI < RETOUR CCI. SVC 0 JMP XXXGN7 < ET REESSAI. < < BONNE GENERATION. < XXXGN8: EQU $ LAD XXXDOK < ENVOI MESSAGE OK. SVC 0 LAD XXXCCI < ET RETOUR AU CCI. SVC 0 NLS XWOR%: VAL 0 LST < < TENTATIVE DE GENERATION : < XXXGN1: EQU $ LAD XXXSGN SVC 0 < ENVOI DEMANDE DE GENERATION. JNE XXXGN2 < ERREUR : IL EXISTE DEJA!!! < < OK , BONNE GENERATION : < LAD XXXDOK SVC 0 < ENVOI DU MESSAGE OK. < < RETOUR DEFINITIF AU CCI : < XXXGN3: EQU $ LAD XXXCCI SVC 0 < RETOUR AU CCI. JMP XXXGN3 < CAS DES !GO. < < CAS DES ERREURS DE GENERATION : < LE PROCESSEUR EXISTE DEJA: < XXXGN2: EQU $ LAD XXXCCI SVC 0 < RETOUR PROVISOIRE AU CCI. JMP XXXGN1 < TRY AGAIN LA GENERATION. END XXXGEN