NMPROC: VAL "ZO" < NOM DU PROCESSEUR. IDP "ZO - RELEASE 01/06/1979" EOT #SIP DEFINITION CMS5# 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 KO. EOT #SIP DEFINITION ITEM# ITEM1: EQU ZERO+PILE-LTNI ITEM2: EQU ZERO+PILE-LTNI-LTNI PAGE < < PILE DU PROGRAMME : < SSTACK: VAL 40 < IL FAUT CE QU'IL FAUT... STACK: DZS SSTACK EOT #SIP IMAGE 256# NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO. IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO. < < 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 < < BUFFER DES SECTEURS SCRATCHES : < SECTOR: EQU STACK+SSTACK DZS 128 < CELA PEUT TOUJOURS SERVIR !!! PAGE < < < L O C A L : < < TABLE M10: BYTE 35;'6D ASCI "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)=" M41: BYTE 13;'6D ASCI "EPAISSEUR X=" M42: BYTE 13;'6D ASCI "EPAISSEUR Y=" M43: BYTE 10;'6D ASCI "MAILLE X=" M44: BYTE 10;'6D ASCI "MAILLE Y=" M45: BYTE 7;'6D ASCI "PAS X=" M46: BYTE 7;'6D ASCI "PAS Y=" M47: BYTE 9;'6D ASCI "VOISINS?" M48: BYTE 9;'6D ASCI "DELTA X=" M49: BYTE 9;'6D ASCI "DELTA Y=" M1: BYTE 15;'6D ASCI "TRANSLATION X=" M2: BYTE 15;'6D ASCI "TRANSLATION Y=" M50: BYTE 11;'6D ASCI "8 VOISINS?" LOCAL LOC: EQU $ < < RELAIS A METTRE EN TETE DU LOCAL AFIN < D'ABSOLUTISER LES DEPLACEMENTS D'ACCES SIMPLIFIANT < AINSI L'ECRITURE DES SOUS-PROGRAMMES EN OVERLAY < IMPLEMENTES DANS L'ITEM2 : < < RESET 00 ('80) ARESET: WORD RESET < MISE D'UN POINT A 0. < SET 01 ('81) ASET: WORD SET < MISE D'UN POINT A 1. < INVER 10 ('82) AINVER: WORD INVER < INVERSION D'UN POINT. < TEST 11 ('83) ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT. < EXISTENCE AVOISE: WORD VOISE < TEST ETAT ET EXISTENCE. < < MESSAGES : < M11: BYTE 7;'6D ASCI "MUL11=" M12: BYTE 7;'6D ASCI "MUL12=" M21: BYTE 7;'6D ASCI "MUL21=" M22: BYTE 7;'6D ASCI "MUL22=" D11: BYTE 7;'6D ASCI "DIV11=" D12: BYTE 7;'6D ASCI "DIV12=" D21: BYTE 7;'6D ASCI "DIV21=" D22: BYTE 7;'6D ASCI "DIV22=" M6: BYTE 11;'6D ASCI "X(CENTRE)=" M7: BYTE 11;'6D ASCI "Y(CENTRE)=" M8: BYTE 16;'6D ASCI "TRANSFORMATION? " M9: BYTE 5;'6D ASCI "RAZ?" CURSOR: BYTE "N";0 < CARACTERE DE DEBLOCAGE DU < CURSEUR (ERREUR A PRIORI). DZS 2 < COORDONNEES Y ET X. REP: DZS 2 < ENTREE DE NBRES HEXADECIMAUX. < < DEMANDES A CMS4 : < DEMSGN: WORD '0602 < CHARGEMENT DES OVERLAYS. WORD BRANCH-ZERO*2 WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 DEMCCI: WORD '0001 < APPEL DU CCI INTERACTIF. DEMMEM: WORD '0004 < DEMANDE D'ALOCATION 8K MOTS. RELMEM: WORD '0004 < DEMANDE D'ALLOCATION 4K MOTS. WORD '4000 WORD '2000 DEMOUT: WORD '0202 < ECRITURE DES MESSAGES. WORD 0 WORD 0 DEMIN: WORD '0101 < ENTREE SUR '01. WORD REP-ZERO*2 WORD 4 DEMREP: WORD '0101 < LECTURE 1 CARACTERE REPONSE. WORD REP-ZERO*2 WORD 1 OG: WORD '0103 < OPEN GRAPHIQUE DE '01. CU: WORD '0106 < MISE EN FONCTION DU CURSEUR WORD 0 < GRAPHIQUE DE '01 (AMDEM=0). LCU: WORD '0109 < LECTURE CURSEUR GRAPHIQUE WORD CURSOR-ZERO*2 < DE '01. WORD 6 CG: WORD '0104 < CLOSE GRAPHIQUE DE '01. RDK: WORD '0C00 < LECTURE SCRATCH DU DISQUE. WORD SECTOR-ZERO*2 WORD 128*2 WORD 0 < NUMERO DU SECTEUR. WDK: WORD '0C02 < ECRITURE SCRATCH DU DISQUE. WORD SECTOR-ZERO*2 WORD 128*2 WORD 0 < NUMERO DU SECTEUR. LOADI: WORD '0502 < RECUPERATION D'UNE IMAGE. WORD NOM-ZERO*2 WORD LIMAG+LNOM+2*2 WORD 2*LNOM DELI: WORD '0302 < DELETE D'UNE IMAGE. WORD NOM-ZERO*2 WORD LIMAG+LNOM+2*2 WORD 2*LNOM STORI: WORD '0402 WORD NOM-ZERO*2 WORD LIMAG+LNOM+2*2 WORD 2*LNOM IF ORDI-"S",XWOR%,,XWOR% STABIL: WORD '8A01 < DEMANDE DE STABILISATION IMAGE. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD TVPV < SUR LE PROCESSEUR VERT. XWOR%: VAL 0 < < CONSTANTES : < KIN: WORD -1 < COMPTEUR DES ENTRIES DANS KO. NGE: WORD "GE" < NOM DU PROCESSEUR GE. IF ORDI-"T",XWOR%,,XWOR% ACNSYS: ASCI ":SYS" XWOR%: VAL 0 NMOTS: WORD 2*LTNI < NBRE DE MOTS DE ITEM1+ITEM2. ALIMAG: WORD LIMAG < NBRE DE MOTS DE L'IMAGE. NMPL: WORD CNMPL < NBRE MOTS DE 16 BITS PAR LIGNE. NLIG: WORD 1024/DY-1 < NBRE DE LIGNES/IMAGE-1. NPPL: WORD CNMPL*16-1 < NBRE DE POINTS/LIGNE-1. ITEST: WORD 1 < 0 : TEST SUR LA VALEUR 0 DES POINTS, < 1 : TEST SUR VALEUR 1 DES POINTS. X: VAL 1 < COORDONNEE X D'UN POINT. Y: VAL 0 < COORDONNEE Y D'UN POINT. PASX: WORD 0 < PAS DE PARCOURS EN X DE L'IMAGE. PASY: WORD 0 < PAS DE PARCOURS EN Y DE L'IMAGE. IF ORDI-"T",XWOR%,,XWOR% TEMPO: WORD '400*2 < TEMPO DE CLIGNOTEMENT VIDEO. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% TEMPO: WORD 5*2 < NOMBRE DE CLIGNOTEMENTS CURSEUR. XWOR%: VAL 0 CENTR: DZS 2 < CENTRE DE ZPOOMING. MU11: WORD 0 MU12: WORD 0 MU21: WORD 0 MU22: WORD 0 DI11: WORD 0 DI12: WORD 0 DI21: WORD 0 DI22: WORD 0 TRANSX: WORD 0 TRANSY: WORD 0 DELX: WORD 0 < X-X(CENTRE) TEMPORAIRE. DELY: WORD 0 < Y-Y(CENTRE) TEMPORAIRE. INDIC: WORD 0 < RESULTAT (0/1) DES TESTS < VIRTUELS. ANCIEN: WORD 1 < EST INCREMENTE DE 1 A < CHAQUE MODIFICATION DE < LA MEMOIRE VIRTUELLE. SAVE: WORD 0 < VARIABLE TEMPORAIRE DE 'PS'. DIMX: WORD 0 < EPAISSEUR DEMANDEE POUR X. DIMY: WORD 0 < EPAISSEUR DEMANDEE POUR Y. KDIMX: WORD 0 < DECOMPTE DE DIMX. KDIMY: WORD 0 < DECOMPTE DE DIMY. MAILX: WORD 0 < PAS D'EPAISSEMENT EN X. MAILY: WORD 0 < PAS D'EPAISSEMENT EN Y. LVOIS: WORD 0 < LISTE DES NOMBRES DE VOISIN < A PRENDRE EN COMPTE : SI < PAR EXEMPLE BIT5=0 ET BIT3=1, < LE POINT COURANT SERA IGNORE < S'IL A 5 VOISINS, ET PRIS EN < COMPTE S'IL EN A 3. IVOIS: WORD 0 < 0 : TESTER LES VOISINS. DELTAX: WORD 0 < PAS SUR X DE TEST DES VOISINS. DELTAY: WORD 0 < PAS SUR Y DE TEST DES VOISINS. < < RELAIS DIVERS : < ATYP: WORD ITEM2+IINDIC < ACCES AU TYPE DE L'ITEM2. AITEM2: WORD ITEM2+LTN < POINT D'ENTREE D'UN SOUS- < PROGRAMME EN OVERLAY < DANS L'ITEM2. ASECT: WORD SECTOR-1,X < RELAI DE RAZ BUFFER SECTEUR. AIMAG1: WORD IMAG,X < ACCES A L'IMAGE VIDEO COURANTE. AIMAG0: WORD 0 < POUR METTRE LES SECTEURS < SCRATCH DANS L'IMAGE COURANTE. ASECT1: WORD SECTOR,X < ACCES AU SECTEUR COURANT. AIMAG: WORD IMAG-1,X < RELAI DE RAZ IMAGE COURANTE. AREP: WORD REP,X < RELAI D'ACCES AUX REPONSES. ACLIGN: WORD CLIGN < CLIGNOTEMENT DES POINTS VIDEO. ASETV: WORD SETV < MISE D'UN POINT VIRTUEL A 1. ARSETV: WORD RSETV < MISE D'UN POINT VIRTUEL A 0. AINVEV: WORD INVEV < INVERSION D'UN POINT VIRTUEL. ATESTV: WORD TESTV < TEST D'UN POINT VIRTUEL. AXISTV: WORD XISTV < EXISTENCE VIRTUELLE... APS: WORD PS < SBT. APR: WORD PR < RBT. API: WORD PI < IBT. APT: WORD PT < TBT. AOP: WORD 0 < PS/PR/PI/PT SUIVANT LES BESOINS. AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. AEXIST: WORD EXIST < EXISTENCE D'UN POINT. AINCX: WORD INCX < DEPLACEMENT +DELTAX ET 'VOISE', AINCY: WORD INCY < DEPLACEMENT +DELTAY ET 'VOISE', ADECX: WORD DECX < DEPLACEMENT -DELTAX ET 'VOISE', ADECY: WORD DECY < DEPLACEMENT -DELTAY ET 'VOISE'. APILE: WORD PILE-1 < PILE DE SMC. ASTACK: WORD STACK-1 < PILE DE KO. AI1: WORD ITEM1-1,X < RELAI DE RAZ ITEM1. AI2: WORD ITEM2-1,X < RELAI DE RAZ ITEM1+ITEM2. IF ORDI-"T",XWOR%,,XWOR% ASP3: WORD SP3 < STABILISATION IMAGE VIDEO < SI :SYS, 0 SINON. XWOR%: VAL 0 AGOGE: WORD GOGE < RETOUR A GE. APRINT: WORD PRINT < EDITION DES MESSAGES. AINTER: WORD INTER < INTERROGATION OUI/NON. AHEX: WORD HEX < CONVERSION ASCI --> BINAIRE. ACOORD: WORD COORD < ENTREE COORDONNE X/Y. ACOEF: WORD COEF < ENTREE RAPPORT DE ZOOM. APAS: WORD PAS < ENTREE D'UN PAS (#0). ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH < EN MEMOIRE. ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK. AINS: WORD INS < INSTRUCTION VARIABLE DE 'PS'. ACODE: WORD CODE,X < LISTE DES CODES POSSIBLES < POUR 'INS' (L'OCTET 0 < EN CONTIENT LE NOMBRE). CODE: EQU $ BYTE 5;'89;'88;'92;'93;'94 AM1: WORD M1 AM2: WORD M2 AM10: WORD M10 AM41: WORD M41 AM42: WORD M42 AM43: WORD M43 AM44: WORD M44 AM45: WORD M45 AM46: WORD M46 AM47: WORD M47 AM48: WORD M48 AM49: WORD M49 AM50: WORD M50 AM50P: WORD M50+1 < RELAI DE CHANGEMENT DU NOMBRE < DE VOISINS DANS LE MESSAGE 'M50'. < < TOPOGRAPHIE MEMOIRE : < NSEC: VAL LIMAG/128 < NRE DE SECTEURS POUR UNE IMAGE. XSECR: VAL 2*LTNI-128 NSECR: VAL XSECR/128 < NBRE DE SECTEURS RESIDANTS < SI PAS DE TRANSFORMATION. XSECRT: VAL LTNI-128 NSECRT: VAL XSECRT/128 < NBRE DE SECTEURS RESIDANTS < SI TRANSFORMATION. ALS: WORD LSECT-1,X < RELAI D'INITIALISATION DE < LA LISTE LSECT. ALSECT: WORD LSECT,X < REALI D'ACCES A LSECT. ATOPO: WORD TOPO-1,X < RELAI D'ACCES A TOPO. ASECTC: WORD 0 < RELAI COURANT D'ACCES A UN < SECTEUR MANIPULE. AUSE: WORD USE-1,X < RELAI D'ACCES A USE. INFINI: WORD '7FFF CSECT: WORD 0 < MEMORISE LE SECTEUR COURANT. WDKT: WORD '0C02 < ECRITURE 1 SECTEUR TOPO. WORD 0 WORD 128*2 WORD 0 RDKT: WORD '0C00 < LECTURE 1 SECTEUR TOPO. WORD 0 WORD 128*2 WORD 0 ABUF1: WORD PILE-XSECR/128*128*2 < @OCTET DU 1ER BUFFER LIBRE. ABUF: WORD PILE-XSECR/128*128*2 < 1ER BUFFER LIBRE SI PAS TRANS. ABUFT: WORD PILE-XSECRT/128*128*2 < 1ER BUFFER LIBRE SI TRANS. ANSECR: WORD NSECR < NBRE DE SECTEURS RESIDANTS < INITIALISE SUR 'PAS TRANS'. AWSE: WORD WSE < ROUTINE DE REECRITURE < D'UN SECTEUR TOPO. AVIRE: WORD VIRE < ROUTINE SUPPRIMANT LA TOPO. ARESID: WORD RESID < REND LE SECTEUR SCRATCH (B) < RESIDENT EN MEMOIRE. < < LISTE DES SECTEURS REELS (DE 0 A NSEC-1) : < LSECT: EQU $ DO NSEC WORD -1 < INITIALEMENT NON RESIDENT. < < LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) : < TOPO: EQU $ DO NSECR WORD -1 < INOCCUPE INITIALEMENT. < < COMPTEUR D'USAGE DES BUFFERS : < USE: EQU $ DO NSECR WORD 0 < INUTILISE INITIALEMENT. PAGE PROG < < < E D I T I O N D ' U N M E S S A G E : < < < ARGUMENT : < A=@MESSAGE. < < PRINT: EQU $ PSR C,X LR A,C < C=@MESSAGE. ADR A,A ADRI 1,A < A=@OCTET DU MESSAGE. STA DEMOUT+1 LBY 0,C < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 LAD DEMOUT SVC 0 < EDITION DU MESSAGE. PLR C,X RSR < < < I N T E R R O G A T I O N : < < < ARGUMENT : < A=@MESSAGE A EMETTRE. < < < RESULTAT : < B=0 : REPONSE=OUI, < 1 : REPONSE=NON, < CARRY POSITIONNE PAR UN 'CPZR B'. < < INTER1: EQU $ LR Y,A < RESTAURE A=@MESSAGE. INTER: EQU $ LR A,Y < SAVE Y=@MESSAGE. BSR APRINT < EMISSION DU MESSAGE (A). LAD DEMREP SVC 0 < ENTREE DE LA REPONSE. LBI 0 < B=0 (OUI A PRIORI). LBY REP < A=CARACTERE REPONDU. CPI "O" JE INTER2 < OUI. LBI 1 < B=1 (NON A PRIORI). CPI "N" JNE INTER1 < INCOMPREHENSIBLE... INTER2: EQU $ CPZR B < POSITIONNEMENT CODES CONDITION. RSR PAGE < < < R O U T I N E D E C R E A T I O N < D ' I M A G E S V I R T U E L L E S : < < < ARGUMENT : < X=X DU POINT A TRAITER, < Y=Y DU POINT A TRAITER. < < < RESULTAT : < LE CARY EST POSITIONNE POUR 'TESTV', DE < PLUS, LE SECTEUR COURANT PEUT CHANGER... < < PS: EQU $ STA SAVE < SAUVEGARDE TEMPORAIRE DU < MOT COURANT DE L'IMAGE. LAI 0 < GENERATION D'UN SBT 0,X < MASQUE. INS: OR SAVE < INSTRUCTION VARIABLE (AD, < SB, OR, AND, EOR) ENTRE < LE MASQUE ET LE MOT COURANT. RSR PR: EQU $ RBT 0,X RSR PI: EQU $ IBT 0,X RSR PT: EQU $ CPZ ITEST < TEST DU MODE 0/1 DE TEST. JNE PT1 < MODE 1. IBT 0,X < MODE 0. PT1: EQU $ TBT 0,X LAI 1 < A EST DESTRUCTIBLE !!! SBCR A < CALCUL DU RESULTAT, STA INDIC < ET TRANSMISSION A 'EXISTV'. RSR < < A C C E S I M A G E V I R T U E L L E : < SETV: EQU $ LA APS < SBT. JMP VIRT RSETV: EQU $ LA APR < RBT. JMP VIRT TESTV: EQU $ LA APT < TBT. JMP VIRT INVEV: EQU $ LA API VIRT: EQU $ STA AOP < MISE EN PLACE DE LA ROUTINE < VARIABLE... PSR B,X,Y LR Y,A MP NMPL < B=NUMERO 1ER MOT DE LA LIGNE < CONTENANT LE POINT ARGUMENT. LR X,A SLRS 4 ADR A,B < B=NUMERO DU MOT CONTENANT < LE POINT ARGUMENT. LAI '0F ANDR A,X < X=NUMERO DU BIT REPRESENTANT < LE POINT ARGUMENT DANS LE < MOT (B). LR B,A SLRD 7 < A=NUMERO DU SECTEUR LE CONTENANT. XR A,B < B=NUMERO DU SECTEUR. SLRS 9 < A=NUMERO DU MOT DANS LE SECTEUR. LR A,Y < Y=NUMERO DU MOT DANS LE SECTEUR. BSR ARESID < REND LE SECTEUR (B) RESIDENT. XR X,Y < X=NUMERO MOT, Y=NUMERO BIT. LA &ASECTC < ACCES MOT. XR X,Y < X=NUMERO BIT, Y=NUMERO MOT. BSR AOP < EXECUTION OPERATION SPECIFIQUE. XR X,Y < X=NUMERO MOT, Y=NUMERO BIT. LB AOP < ACCES A LA FONCTION DEMANDEE. XR A,B CP APT < EST-CE LE TEST VIRTUEL ??? XR A,B JE VIRT3 < OUI, DONC PAS DE MISE A JOUR < DE L'IMAGE VIRTUELLE... STA &ASECTC < MAJ IMAGE VIRTUELLE. VIRT3: EQU $ PLR B,X,Y RSR < < < R E S I D E N C E D ' U N S E C T E U R : < < < ARGUMENT : < B=NUMERO DU SECTEUR A RENDRE RESIDENT. < < RESID: EQU $ PSR X,Y LR B,X < X=SECTEUR REFERENCE. LA &ALSECT JAG VIRT1 < LE SECTEUR REFERENCE EST DEJA < RESIDENT A L'ADRESSE=(A). < < CAS OU LE SECTEUR REFERENCE (X) N'EST PAS RESIDENT : < IC ANCIEN < MODIFICATION DE LA < MEMOIRE VIRTUELLE. STX CSECT < SAUVEGARDE DE (X). LX ANSECR LA INFINI < RECHERCHE D'UN BUFFER. VIRT2: EQU $ CPZ &ATOPO < LE BUFFER COURANT EST-IL < LIBRE ??? JGE VIRT4 < OUI, PAR LE SECTEUR (A). LR X,Y < NON, (Y)=BUFFER CHOISI. JMP VIRT5 VIRT4: EQU $ CP &AUSE < EST-IL PEU UTILISE ??? JL VIRT10 < NON, ON LE LAISSE. LA &AUSE < NON, IL DEVIENT LE MINI. LR X,Y < PEUT-ETRE SERA-T'IL ELU.. VIRT6: EQU $ JDX VIRT2 < < OK, ON A TROUVE UN BUFFER (Y)PEU OU PAS UTILISE : < VIRT5: EQU $ LR Y,X < X=NUMERO DE BUFFER/1. BSR AWSE < REECRITURE DU SECTEUR TOPO < ASSOCIE PAR 'TOPO' AU < BUFFER (X). LA ANCIEN STA &AUSE < ON MEMORISE AINSI LA 'DATE' < DE MODIFICATION DU < BUFFER (X). LX CSECT < X=SECTEUR A CHARGER. LA WDKT+1 < A=@OCTET DU BUFFER LIBERE. STA RDKT+1 < C'EST LA QU'ON VA LIRE (X). SLRS 1 < A=@MOT DU BUFFER. STA &ALSECT < LE SECTEUR (X) SERA RESIDENT < A L'ADRESSE (A). STX RDKT+3 XR X,Y < Y=SECTEUR A CHARGER, < X=NUMERO DU BUFFER. STY &ATOPO < ON MEMORISE LE NUMERO < DU SECTEUR (Y) ASSOCIE < AU BUFFER (X). XR X,Y < X=SECTEUR A CHARGER, < Y=NUMERO DU BUFFER. LAD RDKT SVC 0 < CHARGEMENT DU SECTEUR. LX CSECT LA &ALSECT < A=@MOT DU BUFFER. VIRT1: EQU $ SBT 0 < BIT D'INDEX. STA ASECTC < GENERATION D'UN RELAI D'ACCES < TEMPORAIRE AU SECTEUR (X). SLLS 1 < CONVERSION EN UNE ADRESSE < D'OCTET. SB ABUF1 SLRS 8 ADRI 1,A < A=NUMERO DU BUFFER LE CONTENANT. LR A,X PLR X,Y RSR < < CAS DES SECTEURS TRES UTILISES : < VIRT10: EQU VIRT6 < < < R E E C R I T U R E D ' U N B U F F E R : < < < ARGUMENT : < X=NUMERO DE CE BUFFER. < < WSE: EQU $ LR X,A ADRI -1,A SLLS 8 AD ABUF1 STA WDKT+1 < @OCTET DU BUFFER. LA &ATOPO < A=SECTEUR ASSOCIE. JAL WSE1 < IL N'EXISTE PAS... PSR X STA WDKT+3 < SI EXISTE MAJ DE WDKT. LAD WDKT SVC 0 < REECRITURE DU SECTEUR. LX WDKT+3 < X=SECTEUR ASSOCIE. LAI -1 STA &ALSECT < LE SECTEUR ASSOCIE N'EST < PLUS RESIDENT. PLR X < RESTAURE : X=NUMERO BUFFER. STA &ATOPO < LE BUFFER EST LIBRE. STZ &AUSE < ET NON UTILISE... WSE1: EQU $ RSR < < < R E E C R I T U R E D E T O U S L E S < B U F F E R S E N S C R A T C H : < < VIRE: EQU $ PSR X LXI NSECR < X=NBRE DE BUFFERS. VIRE1: EQU $ BSR AWSE < ECRITURE DU BUFFER (X). JDX VIRE1 PLR X RSR PAGE < < < R E T O U R D E L A Z O N E S C R A T C H < E N M E M O I R E I M A G E : < < CONTI: EQU $ STZ RDK+3 < DEPART SUR LE SECTEUR 0. LA AIMAG1 RBT 0 STA AIMAG0 < INITIALISATION SUR @IMAG. LXI LIMAG/128 < X=NBRE DE SECTEURS. ECH1: EQU $ PSR X LB RDK+3 < B=NUMERO DU SECTEUR COURANT. BSR ARESID < QUE L'ON REND RESIDENT. LX RDK+3 LA &ALSECT < A=@BUFFER QUI LE CONTIENT. JAG ECH2 < OK, IL EST OCCUPE... WORD '1E16 < E R R E U R P R O G !!! ECH2: EQU $ LXI 128 < X=NBRE DE MOTS/SECTEUR. LB AIMAG0 < B=@RECEPTEUR=@IMAGE. MOVE < GENERATION IMAGE. LXI 128 < X=NBRE DE MOTS/SECTEUR. ADR X,B < PROGRESSION @IMAGE. STB AIMAG0 IC RDK+3 < PASSAGE AU SECTEUR SUIVANT. PLR X JDX ECH1 RSR < < < R A Z D E L A Z O N E S C R A T C H : < < RAZDK: EQU $ STZ WDK+3 < DEPART SUR LE SECTEUR 0. LXI 128 RAZ1: EQU $ STZ &ASECT < RAZ DU BUFFER SECTOR. JDX RAZ1 LXI LIMAG/128 < NBRE DE BUFFERS SCRATCH < NECESSAIRE POUR 1 IMAGE. RAZ2: EQU $ PSR X < SAVE LE DECOMPTEUR. LB WDK+3 < B=NUMERO DU SECTEUR COURANT. BSR ARESID < QUE L'ON REND RESIDENT. LX WDK+3 LB &ALSECT < B=RECEPTEUR=@BUFFER ASSOCIE. CPZR B < VALIDATION... JG RAZ3 < OK, IL EST OCCUPE.. WORD '1E16 < E R R E U R P R O G !! RAZ3: EQU $ LA ASECT1 RBT 0 < A=@EMETTEUR DES '0000. LXI 128 < X=NBRE DE MOTS A RAZER. MOVE < RAZ DU SECTEUR COURANT. PLR X < RESTAURE LE DECOMPTEUR. IC WDK+3 < PASSGE AU SECTEUR SUIVANT. JDX RAZ2 < DECOMPTAGE.. RSR 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 < < < C L I G N O T E M E N T D ' U N P O I N T : < < CLIGN: EQU $ IF ORDI-"T",XWOR%,,XWOR% PSR B XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% PSR A,B XWOR%: VAL 0 LB TEMPO < B=NBRE DE CLIGNOTEMENTS. CLIGN1: EQU $ BSR AINVER < INVERSION DU POINT (X,Y). IF ORDI-"S",XWOR%,,XWOR% PSR X LAD STABIL < STABILISATION IMAGE VIDEO. SVC 0 PLR X XWOR%: VAL 0 ADRI -1,B < DECOMPTAGE. CPZR B < EST-CE FINI ??? JG CLIGN1 < NON. IF ORDI-"T",XWOR%,,XWOR% PLR B < OUI. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% PLR A,B XWOR%: VAL 0 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 < < < E X I S T E N C E E T C O M P T A G E < D E S V O I S I N S : < < < ARGUMENT : < X,Y = COORDONNEE D'UN VOISIN. < < < RESULTAT : < B EST INCREMENTE DE 1 SI CE POINT EXISTE < ET EST A 1. < LE CARRY EST NON SIGNIFICATIF !!!! < < VOISE: EQU $ LR X,A JAL NVOISE < X INVALIDE. CP NPPL JG NVOISE < X INVALIDE. LR Y,A JAL NVOISE < Y INVALIDE. CP NLIG JG NVOISE < Y INVALIDE. BSR ATEST < TEST DU POINT EXISTANT (X,Y). ADCR B < B EST INCREMENTE DE 1 < SI (X,Y) EXISTE. NVOISE: EQU $ RSR < < < D E P L A C E M E N T S E T ' V O I S E ' : < < < FONCTIONS : < CES 4 ROUTINES GENERENT LES 4 < DEPLACEMENTS ELEMENTAIRES SUR LES < AXES OX ET OY, ET TESTE LES POINTS < RESULTANTS. < < INCX: EQU $ LA DELTAX ADR A,X < X<--(X)+(DELTAX). BSR AVOISE RSR DECX: EQU $ LA DELTAX SBR A,X < X<--(X)-(DELTAX). BSR AVOISE RSR INCY: EQU $ LA DELTAY ADR A,Y < Y<--(Y)+(DELTAY). BSR AVOISE RSR DECY: EQU $ LA DELTAY SBR A,Y < Y<--(Y)-(DELTAY). BSR AVOISE 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. < < EXIST: EQU $ LR X,A JAL NEXIST < X INVALIDE (<0). CP NPPL JG NEXIST < X INVALIDE (>NPPL). 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 < < < E X I S T E N C E V I R T U E L L E : < < XISTV: EQU $ LR X,A JAL NXISTV < POINT VIRTUEL INEXISTANT. CP NPPL JG NXISTV < POINT VIRTUEL INEXISTANT. LR Y,A JAL NXISTV < POINT VIRTUEL INEXISTANT. CP NLIG JG NXISTV < POINT VIRTUEL INEXISTANT. BSR ATESTV < TEST D'UN POINT VIRTUEL. LA INDIC < A=RESULTAT DU TEST VIRTUEL. NXISTV: EQU $ RSR < VOIR 'EXIST' POUR (A). IF ORDI-"T",XWOR%,,XWOR% TIMAG: WORD IMAG < @RELATIVE IMAGE VIDEO. EOT #SIP SP3# XWOR%: VAL 0 PAGE < < < E N T R E E U N E C O O R D O N N E E : < < < ARGUMENT : < A=@MESSAGE A EMETTRE. < < < RESULTAT : < A=COORDONNEE (X OU Y). < < COORD1: EQU $ < RETOUR EN ERREUR. LR B,A < RESTAURE A=@MESSAGE. COORD: EQU $ PSR X,Y LR A,B < SAVE B=@MESSAGE. BSR APRINT < ENVOI DU MESSAGE ARGUMENT. LAD DEMIN SVC 0 < ENTREE D'UN NBRE HEXADECIMAL. LYI 4 < 4 CHIFFRES MAX A CONVERTIR. BSR AHEX < ESSAI DE CONVERSION... PLR X,Y JNE COORD1 < ERREUR : ON RECOMMENCE. JAL COORD1 < COORDONNEE<0 : ERREUR.. CPI X20-1 < DEBORDEMENT : ERREUR... JG COORD1 < ERREUR... RSR < OK, (A)=VALEUR HEXA. < < < E N T R E E C O E F F I C I E N T : < < < ARGUMENT : < A=@MESSAGE A EMETTRE. < < < RESULTAT : < A=COEFFICIENT. < < COEF1: EQU $ LR B,A < RESTAURE A=@MESSAGE. COEF: EQU $ PSR X,Y LR A,B < SAVE B=@MESSAGE. BSR APRINT < ENVOI DU MESSAGE. LAD DEMIN SVC 0 < ENTREE DE 4 CARACTERES. LYI 4 BSR AHEX < CONVERSION HEXA. PLR X,Y JNE COEF1 < ERREUR SYNTAXE HEXADECIMALE. RSR < OK... < < < E N T R E D ' U N P A S : < < < ARGUMENT : < A=@MESSAGE A EMETTRE. < < < RESULTAT : < A=PAS#0. < < PAS1: EQU $ LR B,A < RESTAURE A=@MESSAGE. PAS: EQU $ PSR X,Y LR A,B < SAVE B=@MESSAGE. BSR APRINT < ENVOI MESSAGE. LAD DEMIN SVC 0 < ENTREE DU PAS. LYI 4 < Y=NBRE CARACTERES A DECODER. BSR AHEX < CONVERSION HEXA-BINAIRE. PLR X,Y JNE PAS1 < ERREUR SYNTAXE. JAE PAS1 < REFUS DE PAS=0. CPI X20-1 < VALIDATION. JG PAS1 < ERREUR. CPI -X20+1 < VALIDATION. JL PAS1 < ERREUR. RSR < < < C O N V E R S I O N A S C I --> B I N A I R E : < < < RESULTAT : < A=VALEUR CONVERTIE S'IL N'Y A PAS < D'ERREUR, LES CODES DE CONDITION < L'INDIQUANT. < < HEX: EQU $ PSR B,X LXI 0 < X=INDEX DE 'REP'. LBI 0 < B=CUMUL COURANT. HEX1: EQU $ LBY &AREP < A=CARACTERE COURANT DE 'REP'. CPI '04 < EST-CE 'EOT' ??? JE HEX5 < OUI, FIN DE CONVERSION. CPI '0D < EST-CE 'R/C' ??? JE HEX5 < OUI, FIN DE CONVERSION. ADRI -'30,A < CONVERSION BIANIRE. JAL HEX2 < ERREUR. CPI 9 < EST-CE UN CHIFFRE DECIMAL ??? JLE HEX3 < OUI. ADRI -"A"+"9"+1,A < NON. CPI 'A < VALIDATION HEXDECIMALE ??? JL HEX2 < ERREUR. CPI 'F < VALIDATION HEXADECIMALE ??? JG HEX2 < ERREUR. HEX3: EQU $ SCRS 4 < CUMUL PARTIEL DE LA SCLD 4 < VALEUR A CONVERTIR. ADRI 1,X < PASSAGE AU CARACTERE SUIVANT. CPR X,Y < EST-CE FINI ??? JNE HEX1 < NON. HEX5: EQU $ LR B,A < OUI, A=RESULTAT. LBI 0 < B=0 : OK. HEX4: EQU $ CPZR B < POSITIONNEMENT DES CODES < DE CONDITION SUR ERREUR. PLR B,X RSR HEX2: EQU $ < CAS DES ERREURS. LBI 1 < B=1#0 : ERREUR. JMP HEX4 < VERS LA SORTIE... PAGE < < < R E T O U R A ' G E ' : < < GOGE: EQU $ GOGEX: EQU $ < ENTRY ALT-MODE. BSR AVIRE < TOUTE L'IMAGE VIRTUELLE EST < RENVOYEE EN SCRATCH AVANT < LE RETOUR A 'GE'. ERR: EQU $ < SORTIE EN ERREUR... LAI BRANCH-ZERO LR A,W < W=@BRANCH. < < RAZ DES ITEMS 1 ET 2 : < LX NMOTS < X=NBRE DE MOTS A RAZER. GOGE1: EQU $ STZ &AI2 JDX GOGE1 < < MISE EN PLACE DU NOM DE 'GE' : < LA NGE STA 0,W < (W)=@BRANCH. < < RETOUR A 4K, ET SMC : < LA APILE LR A,K LAD RELMEM SVC 0 GOGE2: EQU $ LAD DEMSGN < A=@DEMSGN. BSR AOVL < CHARGEMENT DE 'GE'. LAD DEMCCI SVC 0 < RETOUR AU CCI SI ERREUR. JMP GOGE2 PAGE < < < Z O O M I M A G E : < < < FONCTION : < 1- CE PROCESSEUR PERMET D'OBTENIR LA < TRANSFORMATION D'UNE IMAGE VIDEO PAR < UNE MATRICE ARGUMENT, ET DONC EN PARTICULIER < LE ZOOM, < < 2- DE PLUS IL PERMET LA TRANSLATION < DE CETTE MEME IMAGE, < < 3- ET ENFIN, IL FAIT DES OPERATION LOGIQUES < ENTRE IMAGE RESIDANTE ET SCRATCH. < < 4- DE PLUS, IL PERMET DE SUPPRIMER < LES POINTS EN FONCTION DU NOMBRE < DE LEURS VOISINS (0 A 8). < < < NOTA IMPORTANT : < DANS CE PROCESSEUR, ET CONTRAIREMENT A TV/TI, < LES IMAGES NE SONT PAR CONSIDEREES COMME < SUPPORTEES PAR UN TORE; DONC TOUT CE QUI DEPASSE < EST IGNORE... < < WORD IMAG < VALEUR BASE C. WORD LOC+'80 < VALEUR BASE L. WORD BRANCH < VALEUR BASE W. IMAGE: EQU $ LRP K ADRI -1,K PLR C,L,W < INITIALISATION C,L,W. LA ASTACK LR A,K < INITIALISATION K. IC KIN < COMPTAGE DES ENTRIES. JG GOGEX < ABORT SI ALT-MODE. LAD DEMMEM SVC 0 IF ORDI-"T",XWOR%,,XWOR% < < TEST DU NUMERO DE COMTE D'APPEL : < WORD '1E25 < A,B=ACN. CP ACNSYS JNE INIT1 < ON N'EST PAS SOUS :SYS. LR B,A CP ACNSYS+1 JE INIT2 < ON EST SOUS :SYS. INIT1: EQU $ STZ ASP3 < PAS DE STABILISATION D'IMAGE. INIT2: EQU $ XWOR%: VAL 0 < < PAS DE PARCOURS DE L'IMAGE : < PP1: EQU $ LA AM45 BSR APAS < ENTREE DU PAS SUR OX. JAL PP1 < REFUS DES PAS<0. STA PASX < OK. PP2: EQU $ LA AM46 BSR APAS < ENTREE DU PAS SUR OY. JAL PP2 < REFUS DES PAS<0. STA PASY < OK. < < T E S T D E S V O I S I N S ? ? < LA AM47 BSR AINTER < INTERROGATION UTILISATEUR. STB IVOIS < SAVE LA REPONSE 0(OUI)/1(NON). JNE VOIS1 < ON NE TESTERA PAS LES VOISINS. LA AM48 < SI OUI, IL FAUT ENTRER LES BSR APAS < PAS DE RECHERCHE DES VOISINS. STA DELTAX LA AM49 BSR APAS STA DELTAY LXI 9 < ET LES NOMBRES DE VOISINS < A PRENDRE EN COMPTE. VOIS2: EQU $ PSR X LA AM50 BSR AINTER < S'IL Y A (X)-1 VOISINS, LE < POINT EST-IL A PRENDRE < EN COMPTE, C'EST-A-DIRE < DOIT-ON LE MARQUER ??? PLR X JNE VOIS3 < NON. LA LVOIS < OUI, SBT 31,X < ON LE MEMORISE DANS 'LVOIS'. STA LVOIS VOIS3: EQU $ LBY &AM50P ADRI -1,A < PASSAGE AU NOMBRE DE < VOISINS INFERIEUR. STBY &AM50P JDX VOIS2 VOIS1: EQU $ < < R E C U P E R A T I O N D U C E N T R E : < CUR1: EQU $ LAD OG SVC 0 < OPEN GRAPHIQUE. LAD CU SVC 0 < MISE EN FONCTION CURSEUR. LAD LCU SVC 0 < LECTURE DU CURSEUR. < < NOTA : < ON NE TESTE PAS LES ERREURS < EN RETOUR (CAS DU PASSAGE EN < BATCH...), CAR 'CURSOR' EST INITIALISE < PAR 'N'. < IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE CUR2 < ON N'EST PAS SOUS :SYS. WORD '1EC5 < STABILISATION IMAGE VIDEO. CUR2: EQU $ XWOR%: VAL 0 LA CURSOR+1 < Y(CURSEUR). SLRS DEDY < REDUCTION VIDEO. SB NLIG < LES AXES GRAPHIQUES ET < VIDEOS SONT INVERES. NGR A,Y < Y=Y(CURSEUR VIDEO). LA CURSOR+2 < X(CURSEUR). SLRS DEDX < REDUCTION VIDEO. LR A,X < X=X(CURSEUR VIDEO). BSR ACLIGN < CLIGNOTEMENT DU POINT (X,Y). LBY CURSOR < A=COMMANDE ASSOCIEE. < < COMMANDES RECONNUES : < C : CLIGNOTEMENT DU CURSEUR, < N : ENTREE EN HEXA DES COORDONNEES, < O : ENTREE PAR LE CURSEUR. < CPI "C" JE CUR1 < CLIGNOTEMENT SEUL... CPI "O" JE CUR3 < ENTREE PAR CURSEUR.. CPI "N" JNE CUR1 < RIEN COMPRIS, ON RECOMMENCE. < < ENTREE EN HEXA DES COORDONNEES : < LAD M6 < A=@MESSAGE 'X='. BSR ACOEF < ENTREE DE X(CENTR). LR A,X < X=X(CURSEUR VIDEO). LAD M7 < A=@MESSAGE 'Y='. BSR ACOEF < ENTREE DE Y(CENTR). LR A,Y < Y=Y(CURSEUR VIDEO). CUR3: EQU $ STX CENTR+X STY CENTR+Y < < E N T R E E D E L A M A T R I C E : < LAD M11 BSR ACOEF STA MU11 LAD M12 BSR ACOEF STA MU12 LAD M21 BSR ACOEF STA MU21 LAD M22 BSR ACOEF STA MU22 LAD D11 BSR ACOEF STA DI11 LAD D12 BSR ACOEF STA DI12 LAD D21 BSR ACOEF STA DI21 LAD D22 BSR ACOEF STA DI22 LA AM1 BSR ACOEF STA TRANSX LA AM2 BSR ACOEF STA TRANSY < < MODE DE GENERATION DE L'IMAGE SCRATCH : < OPER1: EQU $ LA AM10 BSR APRINT < EMISSION D'UN MESSAGE. LAD DEMREP SVC 0 < ENTREE DU MODE DE GENERATION. LBY REP < A=MODE CHOISI. ADRI -'30,A < DECODAGE ASCI-NUMERIQUE. JALE OPER1 < ERREUR. LXI 0 CPBY &ACODE < VALIDATION PAR RAPPORT AU < MODE MAX. JG OPER1 < ERREU. LR A,X < X=MODE CHOISI. LBY &ACODE < A=OPERATION ASSOCIEE. STBY &AINS < QUE L'ON MET DANS 'PS' < POUR LA ROUTINE 'SETV'. < < DIMENSIONS RECTANGULAIRES DES POINTS : < DIM1: EQU $ LA AM41 BSR ACOORD JAE DIM1 < ERREUR DE DIMENSION. STA DIMX < DIMENSION SUIVANT OX. DIM2: EQU $ LA AM42 BSR ACOORD JAE DIM2 < ERREUR DE DIMENSION. STA DIMY < DIMENSION SUIVANT OY. < < PAS D'EPAISSEMENT DES POINTS : < LA AM43 BSR APAS STA MAILX < PEUT ETRE NEGATIF (MAIS #0). LA AM44 BSR APAS STA MAILY < PEUT ETRE NEGATIF (MAIS #0). < < FAUT-IL TRANSFORMER L'IMAGE ??? < TR1: EQU $ LAD M8 BSR AINTER < INTERROGATION OUI/NON. < < REPONSES RECONNUES : < O : OUI, IL FAUT TRANSFORMER CHAQUE POINT < APRES APPLICATION DE LA MATRICE < <MU,DI> ET DE <TRANSX,TRANSY>. < N : NON... < JE TR2 < OUI, TRANSFORMATION. STZ AITEM2 < NON, RAZ DE L'ENTRY POINT. JMP TR3 TR2: EQU $ LBY &ATYP < OUI, IL FAUT VALIDER LE < TYPE DE L'ITEM2. CPI "P" < TYPE PROGRAMME ???? JNE TR1 < NON, ON REPOSE LA QUESTION... LA ABUFT < PASSAGE AU MODE 'TRANS'. STA ABUF1 LAI NSECRT STA ANSECR LA NMOTS SLRS 1 < AFIN DE NE RAZER STA NMOTS < QUE L'ITEM1 S'IL LA AI1 STA AI2 < Y A TRANS.... TR3: EQU $ < < INITIALISATION DU DISQUE : < LAD M9 BSR AINTER < FAUT-IL RAZER L'IMAGE SCRATCH. JNE RZ1 < NON. BSR ARAZDK RZ1: EQU $ < < < Z O O M D E L ' I M A G E : < < LY NLIG < COORDONNEE Y. ZOOM1: EQU $ LX NPPL < COORDONNEE X. ZOOM4: EQU $ BSR ATEST < TEST DU POINT (X,Y). JNC ZOOM2 < POINT A 0 : RIEN A FAIRE. < < TEST DES VOISINS ?? < CPZ IVOIS < FAUT-IL TESTER LES VOISINS ??? JNE VOIS4 < NON. LBI 0 < OUI, INITIALISATION DU < COMPTEUR DES VOISINS. BSR AINCX BSR ADECY BSR ADECX BSR ADECX BSR AINCY BSR AINCY BSR AINCX BSR AINCX LA DELTAX < RETOUR AU POINT COURANT. SBR A,X LA DELTAY SBR A,Y XR B,X < X=NBRE DE VOISINS. LA LVOIS TBT 0,X < CE NBRE EST-IL A PRENDRE < EN COMPTE ??? XR B,X < RESTAURE X. JNC ZOOM2 < NON, LE POINT (X,Y) EST < DONC IGNORE... VOIS4: EQU $ < < ZOOM D'UN POINT A 1 : < PSR X,Y LR X,A SB CENTR+X < A=X-X(CENTR). STA DELX < DELX=X-X(CENTRE). LR Y,A SB CENTR+Y STA DELY < DELY=Y-Y(CENTRE). < < FORMULE DE TRANSFORMATION : < < X=X(CENTRE)+(MU11/DI11)*DELX+(MU12/DI12)*DELY+TRANSX, < Y=Y(CENTRE)+(MU21/DI21)*DELX+(MU22/DI22)*DELY+TRANSY. < MP MU12 DV DI12 PSR A < SAVE (MU12/DI12)*DELY. LA DELX MP MU11 DV DI11 < (MU11/DI11)*DELX, PLR B < (MU12/DI12)*DELY. ADR B,A AD TRANSX < TRANSLATION X. LX CENTR+X ADR A,X < NOUVEL X. LA DELY MP MU22 DV DI22 PSR A < SAVE (MU22/DI22)*DELY. LA DELX MP MU21 DV DI21 < (MU21/DI21)*DELX, PLR B < (MU22/DI22)*DELY. ADR B,A AD TRANSY < TRANSLATION Y. LY CENTR+Y ADR A,Y < NOUVEL Y. CPZ AITEM2 < FAUT-IL TRANSFORMER ??? JE ZOOM5 < NON... PSR C,L,W < PAR PRUDENCE... LBI 2 < PAR COMPATIBILITE AVEC L' < IMAGE DE DEPART AVEC 'TA'. BSR &AITEM2 < ARG : X,Y - RESULT : X,Y. PLR C,L,W ZOOM5: EQU $ LA DIMX STA KDIMX < DIMENSION DEMANDEE SUR OX. ZOOM6: EQU $ LA DIMY STA KDIMY < DIMENSION DEMANDEE SUR OY. PSR Y ZOOM7: EQU $ LR X,A JAL ZOOM3 < NOUVEL X INVALIDE. CP NPPL JG ZOOM3 < NOUVEL X INVALIDE. LR Y,A JAL ZOOM3 < NOUVEL Y INVALIDE. CP NLIG JG ZOOM3 < NOUVEL Y INVALIDE. BSR ASETV < MARQUAGE VIRTUEL DU < NOUVEAU POINT (X,Y). ZOOM3: EQU $ LA MAILY ADR A,Y DC KDIMY < DECOMPTAGE SUR OY. JG ZOOM7 < IL EN RESTE SUR OY. PLR Y < SINON, RETOUR Y INITIAL, LA MAILX ADR A,X DC KDIMX < DECOMPTAGE SUR OX. JG ZOOM6 PLR X,Y < RESTAURE LE POINT A 1. ZOOM2: EQU $ LA PASX SBR A,X < PASSAGE COLONNE PRECEDENTE. CPZR X JGE ZOOM4 < ON RESTE SUR CETTE LIGNE. LA PASY SBR A,Y < PASSAGE LIGNE PRECEDENTE. CPZR Y < ON A CHANGE DE LIGNE, JGE ZOOM1 < OK, ELLE EXISTE... BR AGOGE < C'EST FINI.... PAGE < < < I M P L A N T A T I O N : < < X12: EQU ZERO+PILE-LTNI-LTNI X10: VAL X12-$ ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE VOLONTAIRE < SI MAUVAISE IMPLANTATION... DZS X10+1 < PAR PROPRETE !!!! EOT #SIP GEN PROCESSEUR#