NMPROC: VAL "VO" < NOM DU PROCESSEUR. IDP "VO - RELEASE 03/03/1980" 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. EOT #SIP DEFINITION ITEM# ITEM1: EQU ZERO+PILE-LTNI ITEM2: EQU ZERO+PILE-LTNI-LTNI PAGE < < PILE DU PROGRAMME : < SSTACK: VAL 60 < 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. IF ORDI-"S",XWOR%,,XWOR% ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (TRACE VIDEO SOLAR). IMAG2: EQU IMAG+LIMAG < IMAGE2 EST EN SOLAR L'IMAGE SCRATCH < SIMULEE. CECI DU FAIT QUE LES INTER- < POLATIONS SONT FAITES PAR LE SYSTEME < ET QUE PAR CONSEQUENT ON NE "SAIT" < PLUS TRACER SUR DISQUE SCRATCH. XWOR%: VAL 0 < < VALIDATION DU FORMAT DE L'IMAGE (CARREE) : < X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE. X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE. IF X20-X21,,X100, IF ATTENTION : L'IMAGE N'EST PAS CARREE !!! X100: VAL 0 < < BUFFER DES SECTEURS SCRATCHES : < SECTOR: EQU STACK+SSTACK DZS 128 < CELA PEUT TOUJOURS SERVIR !!! PAGE < < < L O C A L : < < TABLE M1: BYTE 2;'6D ASCI "??" M9: BYTE 5;'6D ASCI "RAZ?" M10: BYTE 35;'6D ASCI "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)=" M4: BYTE 15;'6D ASCI "GRAPHIQUE ZDC?" M5: BYTE 14;'6D ASCI "TAILLE POINT= " M6: BYTE 17;'6D ASCI "MEMOIRE SCRATCH " M7: BYTE 2;"O";"N";0 M8: BYTE 3;"O";"F";"F" M20: BYTE 9;'6D ASCI "COULEUR=" M21: BYTE 6;'6D ASCI "MODE=" 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 : < IF ORDI-"S",XWOR%,,XWOR% WORD -1 WORD -1 XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% < RESET 00 ('80) ARESET: WORD RESET < MISE D'UN POINT A 0. < SET 01 ('81) ASET: WORD SET < MISE D'UN POINT A 1. XWOR%: VAL 0 < INVER 10 ('82) AINVER: WORD INVER < INVERSION D'UN POINT. < TEST 11 ('83) ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT. < EXISTENCE IF ORDI-"S",XWOR%,,XWOR% WORD -1 XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% AVOISE: WORD VOISE < TEST ETAT ET EXISTENCE. XWOR%: VAL 0 < < MESSAGES : < AM1: WORD M1 AM4: WORD M4 AM5: WORD M5 AM6: WORD M6 AM7: WORD M7 AM8: WORD M8 AM9: WORD M9 AM10: WORD M10 AM20: WORD M20 AM21: WORD M21 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 IF ORDI-"S",XWOR%,,XWOR% DEMM12: WORD '0004 < DEMANDE D'ALLOCATION 12K MOTS. ATRSV: WORD TRSV < TRACE SEGMENT VIDEO SOLAR. WORD '6000 XWOR%: VAL 0 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. IF ORDI-"T",XWOR%,,XWOR% 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. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% AEDKS: WORD EDKS < ECHANGE IMAGE2 <--> DK SCRATCH. DMEDKS: WORD '0C00 < ECHANGE DK SCRATCH <--> IMAGE2. DZS 1 < ADRESSE OCTETS MEMOIRE. WORD 128*2 < COMPTE D'OCTETS. DZS 1 < ADRESSE SECTEUR DK SCRATCH. XWOR%: VAL 0 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. POINT: DZS 2 < POINT COURANT CURSEUR VIDEO. 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 INDIC: WORD 0 < RESULTAT (0/1) DES TESTS < VIRTUELS. SAVE: WORD 0 < VARIABLE TEMPORAIRE DE 'PS'. INDM: WORD 0 < 0 : SCRATCH INACTIVE. C3: WORD 3 < POUR MULTIPLIER C4: WORD 4 < PAR 4/3... < < SEGMENT D'INTERFACE ZDC : < NOMSEG: WORD 0 < MOT DE VALIDATION. SEG: DZS 4 SEGORG: EQU SEG+0 < ORIGINE D'UN SEGMENT. SEGEXT: EQU SEG+2 < EXTREMITE D'UN SEGMENT. LONSEG: VAL $-NOMSEG*2 IF ORDI-"T",XWOR%,,XWOR% AIMAGZ: WORD IMAG-1,X < RELAI POUR RAZER L'IMAGE. ADICO: WORD DICO < DICHOTOMIE D'UN SEGMENT. XWOR%: VAL 0 ATRACE: WORD TRACE < TRACE DICHOTOMIQUE D'UN < SEGMENT VIDEO. ATRACV: WORD TRACEV < IDEM A 'TRACE' SANS 'ZDC'. IF ORDI-"S",XWOR%,,XWOR% AIMAG2: WORD IMAG2-1,X < RELAI DE RAZ IMAGE2. XWOR%: VAL 0 IGRAPH: WORD 0 < 0=EMETTRE PAR LA ZDC 'SEG'. < < INTERFACE D'ACCES ZDC : < STOGS: WORD '000A WORD NOMSEG-ZERO*2 WORD LONSEG WORD 'FFC0 GETGS: WORD '0008 WORD NOMSEG-ZERO*2 WORD SEG-NOMSEG*2 WORD 'C000 ASTORE: WORD STORE < ENVOI SEGMENT DANS ZDC. < < 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. IF ORDI-"S",XWOR%,,XWOR% AEIC: DZS 1 < ADRESSE MOT EN-TETE IMAGE COURANTE < IMAGE1 OU IMAGE2. XWOR%: VAL 0 AREP: WORD REP,X < RELAI D'ACCES AUX REPONSES. ACLIGN: WORD CLIGN < CLIGNOTEMENT DES POINTS VIDEO. IF ORDI-"T",XWOR%,,XWOR% 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. XWOR%: VAL 0 AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. IF ORDI-"T",XWOR%,,XWOR% AEXIST: WORD EXIST < EXISTENCE D'UN POINT. XWOR%: VAL 0 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). ACUR: WORD CUR < ENTREE DU CURSEUR GRAPHIQUE. IF ORDI-"T",XWOR%,,XWOR% ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH < EN MEMOIRE. XWOR%: VAL 0 ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK. IF ORDI-"S",XWOR%,,XWOR% OPER: DZS 1 < OPERATION CHOISIE (REPONSE A LA < QUESTION MODE...) : < 1=AD, 2=SB, 3=OR, 4=AND, 5=EOR. MODI: DZS 1 < MODE DEMANDE POUR L'INTERPOLATION < ('TRSV') : < = -1 : IBT, < = -2 : RBT, < = -3 : SBT. XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% 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 XWOR%: VAL 0 ACOM: WORD COM1,X < RECONNAISSANCE DES COMMANDES. ALOOP: WORD LOOP < ENTREE DES COMMANDES. < < CONSTANTES SPIRALES : < NM: WORD 1 < NBRE DE PAS DE GENERATION < DE LA SPIRALE. IF ORDI-"T",XWOR%,,XWOR% NX: WORD 1 < POUR CALCULER LA LONGUEUR < HORIZONTALE. NY: WORD 1 < ID. SUR LA VERTICALE. SNX: WORD 0 < DECOMPTEUR A PARTIR DE NX. SNY: WORD 0 < DECOMPTEUR A PARTIR DE NY. ASPI: WORD SPIR < TRACE D'UNE SPIRALE. AVALXY: WORD VALXY < VALIDATION DE (X,Y); SI OK, < TRACE DU POINT. AVALN: WORD VALN < VALIDATION DE NX ET NY PAR < RAPPORT A NM. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% X1: DZS 1 < POUR TRACE SEGMENT. Y1: DZS 1 < IDEM. X2: DZS 1 < IDEM. Y2: DZS 1 < IDEM. IPCONF: DZS 1 < INDICATEUR POINTS CONFONDUS : < = 0 : POINTS DISTINCTS, < = 1 POINTS CONFONDUS. < UTILISE LORSQU'ON DOIT TRACER UN < SEGMENT D'UN POINT P1 VERS UN POINT P2, < SI LES DEUX POINTS SONT CONFONDUS, IL < EST INUTILE D'APPELER LE SYSTEME POUR < INTERPOLER. < < DONNEES D'ACCES AUX 8 < COULEURS SIMULTANEMENT : < NCOOL:: VAL 3 < NOMBRE DE PROCESSEURS DE COULEURS. MODEV: WORD 0 < =0 : MODE 8 COULEURS "OFF", < #0 : DONNE ALORS LE MODE DE TRACE (VOIR < LA LISTE 'EVIDEO' ET LE MOT 'COLOR'. COLOR: WORD 0 < COULEUR DU TRACE (0-8). AVIDEO: WORD EVIDEO,X < TABLE DE TRANSCODAGE ENTRE LES MODES < DEMANDES, ET LA COMMANDE DE 'DKU'. XWOR%: VAL 0 < < MISE EN PLACE DES ROUTINES DE TRAITEMENT DES POINTS : < (X=-3 : SET / X=-2 : RESET / X=-1 : INVER) < IF ORDI-"T",XWOR%,,XWOR% LRR: WORD $+3+1,X;SET;RESET;INVER LRV: WORD $+3+1,X;SETV;RSETV;INVEV APOINT: WORD 0 < CONTIENT L'UNE DES 6 ADRESSES < PRECEDENTES. XWOR%: VAL 0 MODE: WORD -3 < MODE 'SET' A PRIORI; PERMET < DE POSITIONNER 'APOINT'. < < CONSTANTES DICHOTOMIQUES : < DICOX: WORD 0 < X DU POINT VIDEO COURANT M. DICOY: WORD 0 < Y DU POINT VIDEO COURANT M. DICOX1: WORD 0 < X DE L'ORIGINE VIDEO COURANTE M1. DICOY1: WORD 0 < Y DE L'ORIGINE VIDEO COURANTE M1. DICOX2: WORD 0 < X EXTREMITE VIDEO COURANTE M2. DICOY2: WORD 0 < Y EXTREMITE VIDEO COURANTE M2. IF ORDI-"T",XWOR%,,XWOR% < < 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. ANCIEN: WORD 1 < EST INCREMENTE DE 1 A CHAQUE < MODIFICATION DE LA MEMOIRE < VIRTUELLE (CONSTITUE DONC < UNE HORLOGE). 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. XWOR%: VAL 0 < < LISTE DES COMMANDES RECONNUES : < COM1: EQU $ WORD "A";GENA WORD "B";GENB WORD "+";GENS WORD "-";GENR WORD "I";GENI WORD "0";GEN0 WORD "1";GEN1 WORD "2";GEN2 WORD "F";GENF WORD "S";GENE WORD "V";GENV WORD "W";GENW WORD "Z";GENZ WORD "T";GENT WORD "R";GENCCI WORD "M";GENM IF ORDI-"S",XWOR%,,XWOR% WORD "5";GEN5 WORD "6";GEN6 WORD "7";GEN7 WORD "K";GENCOL WORD "L";GENMOD XWOR%: VAL 0 WORD -1 < FIN DE LISTE. EVIDEO: EQU $ < MODE : WORD '0000 < =0 : "OFF", WORD '0180 < =1 : "OR" FLOU, WORD '0080 < =2 : "AND" FLOU, WORD 'FF80 < =3 : "EOR" FLOU, WORD '01B0 < =4 : "FORCAGE NIVEAU", WORD '01F0 < =5 : "NE TRACER QUE SUR LE NOIR", WORD '0380 < =6 : "OR" BINAIRE, WORD '0280 < =7 : "AND" BINAIRE, WORD 'FD80 < =8 : "EOR" BINAIRE. LVIDEO:: VAL $-EVIDEO-1 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 < < < E N T R E E C U R S E U R < G R A P H I Q U E : < < < RESULTAT : < SI LE CARACTERE FRAPPE N'EST PAS 'C', < X,Y=COORDONNE VIDEO DU CURSEUR GRAPHIQUE, < POUR 'C', LE PROGRAMME REBOUCLE EN < CLIGNOTANT. < < CUR: EQU $ LAD OG SVC 0 LAD CU SVC 0 LAD LCU SVC 0 IF ORDI-"T",XWOR%,,XWOR% LA ASP3 JAE CUR2 < ON N'EST PAS SOUS :SYS.. WORD '1EC5 < SOUS :SYS, ON STABILISE IMAGE. CUR2: EQU $ XWOR%: VAL 0 LA CURSOR+1 < Y(CURSEUR). MP C4 < POUR ATTEINDRE DV C3 < TOUTE LA VIDEO... SLRS DEDY SB NLIG NGR A,Y < Y(VIDEO). LA CURSOR+2 < X(CURSEUR). SLRS DEDX LR A,X < X(VIDEO). LBY CURSOR < A=CARACTERE DE DEBLOCAGE. CPI "C" < EST-CE UN CLIGNOTEMENT ??? JNE CUR3 < NON - ALLER VERS LA SORTIE. BSR ACLIGN < OUI - CLIGNOTEMENT DU POINT (X,Y). JMP CUR < ET ON REBOUCLE. CUR3: EQU $ STX POINT+X < SAVE LES COORDONNEES STY POINT+Y < DU CURSEUR VIDEO. RSR < NON, ON SORT... PAGE IF ORDI-"T",XWOR%,,XWOR% < < < T R A C E D I C H O T O M I Q U E D ' U N S E G M E N T : < < DICO: EQU $ LA DICOX1 < A=X1. AD DICOX2 < A=X1+X2. SLRS 1 < A=(X1+X2)/2. STA DICOX < X DU MILIEU DE M1M2. LA DICOY1 < A=Y1. AD DICOY2 < A=Y1+Y2. SLRS 1 < A=(Y1+Y2)/2. STA DICOY < Y DU MILIEU DE M1M2. < < POSITION DE M PAR RAPPORT A M1 : < SB DICOY1 < A=Y-Y1. JANE DICO31 < M#M1. LA DICOX < A=X. SB DICOX1 < A=X-X1. JAE DICO32 < M=M1. < < POSITION DE M PAR RAPPORT A M2 : < DICO31: EQU $ LA DICOY < A=Y. SB DICOY2 < A=Y-Y2. JANE DICO30 < M#M2 ET M#M1. LA DICOX < A=X. SB DICOX2 < A=X-X2. JANE DICO30 < M#M2 ET M#M1. < < CAS OU M=M1 OU M=M2 : < DICO32: EQU $ LX DICOX LY DICOY BSR ASPI < SPIRALE CENTREE SUR M=(M1+M2)/2. RSR < ARRET PROVISOIRE DE LA DICHOTOMIE < DESCENDANTE. < < CAS OU M#M1 ET M#M2 : < DICO30: EQU $ LA DICOX2 < A=X2. LB DICOY2 < B=Y2. PSR A,B < SAVE LE POINT M2 COURANT. LA DICOX < A=X. STA DICOX2 < X2<--X. LA DICOY < A=Y. STA DICOY2 < Y2<--Y. BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASPI < SPIRALE CENTREE SUR M2. STX DICOX1 < X1<--X2. STY DICOY1 < Y1<--Y2. PLR A,B < RESTAURATION DU POINT M2 APRES < LE CHANGEMENT DU POINT M1. STA DICOX2 < RESTAURE X2. STB DICOY2 < RESTUARE Y2. JMP DICO < VERS LA POURSUITE DE LA DICHOTOMIE. XWOR%: VAL 0 < < < T R A C E D ' U N S E G M E N T V I D E O : < < TRACEV: EQU $ LA INDM TBT 15 < SCRACTCH EST-ELLE ACTVIVE ??? JNC NTRACV < NON, RIEN A FAIRE... IF ORDI-"S",XWOR%,,XWOR% < < CHOIX MODE DE TRACE POUR L'INTERPOLATEUR ('MODI') SUR IMAGE2 < EN FONCTION DE 'OPER' ET 'MODE' : < < - SI 'MODE' = -1 (INVERSION) ON FERA 'MODI'=IBT, QUEL QUE SOIT OPER, < - SI 'MODE' = -2 (NOIR) ON FERA 'MODI'=RBT, QUEL QUE SOIT OPER, < - SI 'MODE' = -3 (BLANC) ON FERA : < - 'MODI'=SBT SI 'OPER'=OR, < - 'MODI'=IBT SI 'OPER'=EOR, < - RIEN DU TOUT SI 'OPER'=AND. < - NOTA: SI 'OPER' = AD OU SB, ON NE FAIT JAMAIS RIEN < SUR IMAGE2. < LRM A WORD IMAG2-LENTIM < ADRESSE MOT EN-TETE IMAGE COURANTE, STA AEIC < POUR 'TRSV'. < STZ MODI < VALEUR INITIALE. LA OPER ADRI -3,A JAL NTRACV < SI 'OPER' = AD OU SB, ON NE FAIT RIEN. < ON EST SUR ICI QUE 3 <= 'OPER' <= 5. LA MODE CPI -1 < TEST 'MODE' :: IBT. JE TRAIBT CPI -2 < TEST 'MODE' :: RBT. JE TRARBT < ICI, 'MODE' = SBT. LA OPER < VOYONS DONC 'OPER'. CPI 4 JE NTRACV < C'EST AND, RIEN A FAIRE... CPI 5 JE TRAIBT < C'EST EOR. < ICI, 'MODE' = SBT ET 'OPER' = OR. TRASBT: EQU $ < FAIRE 'MODI' = -3 ('SBT'). DC MODI TRARBT: EQU $ < FAIRE 'MODI' = -2 ('RBT'). DC MODI TRAIBT: EQU $ < FAIRE 'MODI' = -1 ('IBT'). DC MODI XWOR%: VAL 0 PSR X,Y,C JMP TRACE1 < IDEM A 'TRACE' MAIS IGNORE < SYSTEMATIQUEMENT LA 'ZDC' !!! TRACE: EQU $ IF ORDI-"S",XWOR%,,XWOR% LA MODE STA MODI < 'MODI' = 'MODE' (TRACE "REEL"). < LRM A WORD ENTIM < ADREESSE EN-TETE IMAGE1 POUR 'TRSV'. STA AEIC XWOR%: VAL 0 PSR X,Y,C < < MODE GRAPHIQUE ??? < CPZ IGRAPH JNE TRACE1 < NON, JUSTE VIDEO. LA DICOX1 SLLS DEDX STA SEGORG+X < X(ORIGINE GRAPHIQUE). LA DICOY1 SB NLIG NGR A,A SLLS DEDY STA SEGORG+Y < Y(ORIGINE GRAPHIQUE). LA DICOX2 SLLS DEDX STA SEGEXT+X < X(EXTREMITE GRAPHIQUE). LA DICOY2 SB NLIG NGR A,A SLLS DEDY STA SEGEXT+Y < Y(EXTREMITE GRAPHIQUE). BSR ASTORE < ENVOI DU SEGMENT EN ZDC. TRACE1: EQU $ IF ORDI-"S",XWOR%,,XWOR% < < T R A C E D ' U N " S E G M E N T " V I D E O E N < < S O L A R. < < < ON VA REMPLIR DEUX CARRES DE TAILLE 'NM' * 'NM' CENTRES < RESPECTIVEMENT EN M1 ET M2 (DICOX1,DICOY1),(DICOX2,DICOY2) < EN PROCEDANT COMME CECI: < EN CHAQUE POINT P1 DU CARRE 1 ON TIRE UN TRAIT VERS LE POINT < CORRESPONDANT P2 DU CARRE 2. < PSR A,B,X < < POSITIONNEMENT DE L'INDICATEUR 'IPCONF' : POINTS CONFONDUS. < STZ IPCONF < DISTINCTS A PRIORI. LA DICOX1 CP DICOX2 JNE TRAC3 LA DICOY1 CP DICOY2 JNE TRAC3 IC IPCONF < POINTS CONFONDUS. TRAC3: EQU $ LA NM < TAILLE DEMANDEE. ADRI -1,A SLRD 16+1 < 'B' = E((NM-1)/2). < < ON VA PARTIR DU POINT INFERIEUR GAUCHE DU CARRE A DECRIRE. < < X1,Y1 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 1 (M1). LA DICOX1 SBR B,A STA X1 LA DICOY1 ADR B,A STA Y1 < X2,Y2 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 2 (M2). LA DICOX2 SBR B,A STA X2 LA DICOY2 ADR B,A STA Y2 < CPZ IPCONF < TEST POINTS CONFONDUS. JNE TRAC5 < POINTS CONFONDUS, VERS TRAITEMENT < SIMPLIFIE. < < ON VA MAINTENANT PARCOURIR POINT PAR POINT CES DEUX CARRES, ET < RELIER DEUX A DEUX LES POINTS CORRESPONDANTS. < LX NM < TAILLE DEMANDEE. TRAC1: EQU $ PSR X LA X1 LB X2 PSR A,B < SAVE LES X. LX NM < POUR AVOIR 'NM' * 'NM'. TRAC2: EQU $ BSR ATRSV < TRACE SEGMENT P1-P2. IC X1 IC X2 JDX TRAC2 < POINT SUIVANT. PLR A,B < RESTAURATION DES X. STA X1 STB X2 DC Y1 DC Y2 PLR X JDX TRAC1 JMP TRAC4 < TRAC5: EQU $ < < POINTS CONFONDUS, TRAITEMENT SIMPLIFIE : < ON VA SE CONTENTER DE REMPLIR UN CARRE DE SURFACE < 'NM' * 'NM' CENTRE EN (DICOX1,DICOY1). < LA X1 AD NM ADRI -1,A STA X2 LX NM < NM SEGMENTS HORIZONTAUX A TRACER. TRAC6: EQU $ BSR ATRSV < TRACE 1 SEGMENT HORIZONTAL DU CARRE. DC Y1 DC Y2 JDX TRAC6 < TRAC4: EQU $ CPZ MODEV < 3 OU 8 COULEURS ??? JNE TRAC10 < 8 COULEURS... LAD STABIL < 3 COULEURS : SVC 0 < VISUALISATION... TRAC10: EQU $ PLR A,B,X XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% < < TRACE DICHOTOMIQUE DU SEGMENT : < LX DICOX1 < X=X1. LY DICOY1 < Y=Y1. PSR X,Y < SAVE M1. BSR ASPI < SPIRALE CENTREE SUR M1. LA DICOX1 CP DICOX2 JNE TRACE2 < M1#M2 : TRACE D'UN SEGMENT... LA DICOY1 CP DICOY2 JE TRACE3 < M1=M2 : TRACE UN POINT SEUL : < C'EST FINI.... TRACE2: EQU $ BSR ADICO < TRACE DU SEGMENT M1M2. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASPI < SPIRALE CENTREE SUR M2. TRACE3: EQU $ PLR X,Y STX DICOX1 < RESTORE M1. STY DICOY1 < RESTORE M1. XWOR%: VAL 0 PLR X,Y,C NTRACV: EQU $ RSR IF ORDI-"T",XWOR%,,XWOR% < < < V A L I D A T I O N N X E T N Y : < < < RESULTAT : < A=0 SI NX EY NY SONT OK. < < VALN: EQU $ LA NX CP NM JG VALN1 < NX INVALIDE. LA NY CP NM JG VALN1 < NY INVALIDE. LAI 0 < NX ET NY VALIDES. VALN1: EQU $ RSR < < < V A L I D A T I O N E T T R A C E < D U P O I N T ( X , Y ) : < < < ARGUMENT : < X,Y=COORDONNEES D'UN POINT A VALIDER. < < VALXY: EQU $ LR X,A JAL VALXY1 < X INVALIDE. CP NPPL JG VALXY1 < X INVALIDE. LR Y,A JAL VALXY1 < Y INVALIDE. CP NLIG JG VALXY1 < Y INVALIDE. BSR APOINT < OK, TRACE DU POINT (X,Y). VALXY1: EQU $ RSR < < < T R A C E D ' U N E S P I R A L E : < < < ARGUMENT : < X,Y=COORDONNEES DU CENTRE. < < SPIR: EQU $ PSR X,Y < SAVE LE CENTRE. LAI 1 STA NX STA NY SPIR1: EQU $ < < X=X+1 NX FOIS : < LA NX STA SNX < DECOMPTEUR HORIZONTAL. SPIR2: EQU $ BSR AVALXY < TRACE EVENTUEL DE (X,Y). ADRI 1,X < X=X+1. DC SNX JNE SPIR2 < PARCOURS HORIZONTAL. IC NX < SI FIN, ON ALLONGE LA LONGUEUR < DE LA PROCHAINE HORIZONTALE. BSR AVALN < VALIDATION NX. JANE SPIRF < C'EST FINI... < < Y=Y+1 NY FOIS : < LA NY STA SNY < DECOMPTEUR VERTICAL. SPIR12: EQU $ BSR AVALXY < TRACE EVENTUEL DE (X,Y). ADRI 1,Y < Y=Y+1. DC SNY JNE SPIR12 < PRACOURS VERTICAL. IC NY < SI FIN, ON ALLONGE LA LONGUEUR < DE LA PROCHAINE VERTICALE. BSR AVALN < VALIDATION NY. JANE SPIRF < C'EST FINI... < < X=X-1 NX FOIS : < LA NX STA SNX SPIR22: EQU $ BSR AVALXY < TRACE EVENTUEL DE (X,Y). ADRI -1,X < X=X-1. DC SNX JNE SPIR22 < PARCOURS HORIZONTAL. IC NX < ALLONGEMENT HORIZONTAL. BSR AVALN < VALIDATION NX. JANE SPIRF < C'EST FINI... < < Y=Y-1 NY FOIS : < LA NY STA SNY SPIR32: EQU $ BSR AVALXY < TRACE EVENTUEL DE (X,Y). ADRI -1,Y < Y=Y-1. DC SNY JNE SPIR32 < PARCOURS VERTICAL. IC NY < ALLONGEMENT VERTICAL. BSR AVALN < VALIDATION NY. JAE SPIR1 < ET ON CONTINUE... < < C'EST FINI : < SPIRF: EQU $ IF ORDI-"S",XWOR%,,XWOR% LAD STABIL < STABILISATION DE L'IMAGE. SVC 0 XWOR%: VAL 0 PLR X,Y RSR XWOR%: VAL 0 < < < E N V O I E N Z D C : < < STORE: EQU $ LAD GETGS SVC 0 CPZ NOMSEG < LE SEGMENT PRECEDENT A-T'IL < ETE ACQUITTE ??? JNE STORE < NON, ON ATTEND. DC NOMSEG < OUI, VALIDONS LE SUIVANT. LAD STOGS SVC 0 < QUE L'ON ENVOIE. RSR PAGE IF ORDI-"S",XWOR%,,XWOR% < < T R A C E V I D E O D ' U N S E G M E N T E N S O L A R. < < (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !). < < < TRSV: 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,W < LR K,B ADRI 1,B < ZONE RECEPTRICE. LA AEIC < ZONE EMETTRICE (A SAUVER DANS LA PILE). LR A,W < POUR BASER L'EN-TETE DE L'IMAGE. LXI LENTIM < LONGUEUR EN-TETE IMAGE. 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. < < DISCRIMINATION 3/8 COULEURS : < CPZ MODEV < ALORS ??? JE SEG10 < 3 COULEURS (ANCIEN MODE)... < < 8 COULEURS (NOUVEAU MODE) : < LA STABIL+1 LB STABIL+2 LX STABIL+3 PSR A,B,X,W < SAUVEGARDE DE LA DEMANDE 'STABIL'. LRM A,B,W WORD ENTIM-ZERO*2 < (A)=ADRESSE DE L'EN-TETE (EN OCTETS), WORD LENTIM*2 < (B)=LONGUEUR DE L'EN-TETE, WORD ENTIM < (W)=ADRESSE DE L'EN-TETE (EN MOTS). STA STABIL+1 < MISE-A-JOUR STB STABIL+2 < DE LA STZ STABIL+3 < DEMANDE 'STABIL'. LA MODEV < ACCES AU MODE DE TRACE, OR COLOR < CONCATENATION DE LA COULEUR, STA DEPMOD,W < ET MISE DANS L'EN-TETE... LRM A WORD '7F00 STA DEPSPA,W LAD STABIL SVC 0 < ET TRACE... PLR A,B,X,W STX STABIL+3 < RESTAURATION STB STABIL+2 < DE LA STA STABIL+1 < DEMANDE 'STABIL'... JMP SEG11 < ET SORTIE... < < 3 COULEURS (ANCIEN MODE) : < SEG10: EQU $ < < POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT'/'IBT'). < STZ DEPMOD,W < MODE TRACE = 'RBT' A PRIORI. LA MODI < MODE DEMANDE. CPI -2 JE SEG1 < C'EST 'RBT'. CPI -3 JE SEGS < C'EST 'SBT'. DC DEPMOD,W < C'EST 'IBT'. JMP SEG1 SEGS: EQU $ IC DEPMOD,W < C'EST 'SBT'. SEG1: EQU $ LA AEIC SLLS 1 < ADRESSE OCTET EN-TETE IMAGE. LRM X WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE. STA STABIL+1 STX STABIL+2 LB STABIL+3 < SAVE COMPOSANTE DIFFUSION. STZ STABIL+3 < INTERPOLATION SEULE. LAD STABIL < DEMANDE D'INTERPOLATION. SVC 0 LRM A,X WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE. STA STABIL+1 STX STABIL+2 STB STABIL+3 < RESTAURATION COMPOSANTE DIFFUSION. < < EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...). < SEG11: EQU $ ADRI -LENTIM,K < RESTAURATION DE 'K'. LR K,A ADRI 1,A < ZONE EMETTRICE. LB AEIC < ZONE RECEPTRICE (A RESTAURER). LXI LENTIM < LONGUEUR. MOVE < PLR A,B,X,W RSR PAGE EDKS: EQU $ < < E C H A N G E D K S C R A T C H < - - > I M A G E 2 ( SOLAR) < < ARGUMENT: < - 'A' = 0 : LIRE. < - 'A' = 2 : ECRIRE. < < DETRUIT 'A'. < PSR X < LR A,X LA DMEDKS ANDI 'FF00 ORR X,A STA DMEDKS < SENS DE L'ECHANGE. < LRM A WORD IMAG2-ZERO*2 STA DMEDKS+1 < ADRESSE OCTET COURANTE. < STZ DMEDKS+3 < ADRESSE SECTEUR SCRATCH COURANTE. < XWOR%1: VAL LIMAG/128 < NOMBRE D'ECHANGES. XWOR%2: VAL XWOR%1*128 IF LIMAG-XWOR%2,,XWOR%3, IF ERREUR VOLONTAIRE : NOMBRE D'ECHANGES INCORRECT. XWOR%3: VAL 0 LXI XWOR%1 < NOMBRE D'ECHANGES. EDKS1: EQU $ PSR X < LAD DMEDKS < ECHANGE. SVC 0 LA DMEDKS+1 AD DMEDKS+2 STA DMEDKS+1 < NOUVELLE ADRESSE COURANTE. IC DMEDKS+3 < NOUVELLE ADRESSE SECTEUR COURANTE. < PLR X JDX EDKS1 < PLR X RSR XWOR%: VAL 0 PAGE IF ORDI-"T",XWOR%,,XWOR% < < < 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 XWOR%: VAL 0 < < < R A Z D E L A Z O N E S C R A T C H : < < RAZDK: EQU $ IF ORDI-"T",XWOR%,,XWOR% 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.. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% < < EN SOLAR 'IMAGE SCRATCH EST SIMULEE DANS 'IMAG2'. < LX ALIMAG < NOMBRE DE MOTS DE L'IMAGE. STZ &AIMAG2 < RAZ. JDX $-1 LAI 2 < SENS DE L'ECHANGE = ECRITURE. BSR AEDKS < IMAGE2 --> DKS. XWOR%: VAL 0 RSR PAGE IF ORDI-"T",XWOR%,,XWOR% < < < 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 XWOR%: VAL 0 < < < 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% CPZ MODEV < 3 OU 8 COULEURS ??? JNE CLIGN2 < 8 COULEURS : PAS DE CLIGNOTEMENT... PSR A,B < 3 COULEURS... 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 DE L'IMAGE. 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 CLIGN2: EQU $ 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 IF ORDI-"T",XWOR%,,XWOR% < < < 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 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). 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. JALE PAS1 < REFUS DE PAS<=0. CPI X20-1 < VALIDATION. JG 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. IF ORDI-"T",XWOR%,,XWOR% BSR AVIRE < TOUTE L'IMAGE VIRTUELLE EST < RENVOYEE EN SCRATCH AVANT < LE RETOUR A 'GE'. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LA INDM TBT 15 < OPTION "SCRATCH" ACTIVE ? JNC GOGE3 < NON. LAI 2 < OUI, ALORS ECRIRE IMAGE2 EN SCRATCH. BSR AEDKS < SENS DE L'ECHANGE = ('A'). GOGE3: EQU $ XWOR%: VAL 0 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 < < < G E N E R A T E U R D E V O L E T S : < < < FONCTION : < A PARTIR DU CURSEUR GRAPHIQUE DE < LA VISU '01, IL PERMET DE TRACER < SIMULTANEMENT SUR L'IMAGE RESIDEN- < TE ET SUR L'IMAGE SCRATCH DES IMAGES < LINEAIRES POUVANT SERVIR ENSUITE < DE CONTOURS DE VOLETS, MAIS AUSSI < AVEC L'EMISSION OPTIONNELLE PAR ZDC < PERMET DE GENERER LE DESSIN EQUIVALENT < A UNE IMAGE VIDEO... < < 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. IF ORDI-"S",XWOR%,,XWOR% LAD DEMM12 < SOLAR: IL FAUT 12K A PRIORI PUISQUE SVC 0 < L'IMAGE SCRATCH EST SIMULEE EN 'IMAG2'. XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% LAD DEMMEM SVC 0 < < 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 < < 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. IF ORDI-"S",XWOR%,,XWOR% CPI 5 JG OPER1 STA OPER < OPERATION DEMANDEE. XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% 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'. XWOR%: VAL 0 TR3: EQU $ < < INITIALISATION DU DISQUE : < IF ORDI-"S",XWOR%,,XWOR% < SOLAR, LIRE L'IMAGE SCRATCH EN 'IMAG2'. LAI 0 < SENS DE L'ECHANGE = LECTURE. BSR AEDKS < DK SCRATCH --> IMAGE2. XWOR%: VAL 0 LA AM9 BSR AINTER < FAUT-IL RAZER L'IMAGE SCRATCH. JNE RZ1 < NON. BSR ARAZDK RZ1: EQU $ < < DOIT-ON EMETTRE PAR ZDC ??? < LA AM4 BSR AINTER < FAUT-IL EMETTRE PAR ZDC ??? STB IGRAPH < SAVE LA REPONSE 0/1. < < A T T E N T I O N : < < ON SUPRIME LE CODE SUIVANT < QUI AVAIT POUR OBJET D'ACTIVER < LA ZONE SCRATCH ; DESORMAIS, < CELLE-CI SERA INACTIVE INITIA- < LEMENT !!! < < LAI "M" < ON VA SIMULER UNE COMMANDE < JMP SIMULM < 'M', AFIN DE RENDRE ACTIVE < < LA ZONE SCRATCH. < < < A N A L Y S E D E S C O M M A N D E S : < < < COMMANDES RECONNUES : < A : ORIGINE D'UN SEGMENT, < B : EXTREMITE D'UN SEGMENT, < S : EXTREMITE ETOILEE D'UN SEGMENT, < 0 : MISE D'UN POINT A 0, < 1 : MISE D'UN POINT A 1, < 2 : INVERSION D'UN POINT, < + : MODE 'SET', < - : MODE 'RESET', < I : MODE 'INVER', < V : VOLET 1 SUR FOND 0, < W : VOLET 0 SUR FOND 1, < Z : RAZ DE L'IMAGE RESIDENTE. < T : CHANGEMENT TAILLE SPIRALE AUTOUR D'UN POINT. < C : CURSEUR VIDEO, < R : RETOUR TEMPORAIRE AU CCI. < M : ACTIVATION/DESACTIVATION EN BASCULE SCRATCH. IF ORDI-"S",XWOR%,,XWOR% < 5 : COMPOSANTE ROUGE ACTIVE. < 6 : COMPOSANTE VERTE ACTIVE. < 7 : COMPOSANTE BLEUE ACTIVE. XWOR%: VAL 0 < F : FIN. < < LOOP: EQU $ BSR ACUR < ENTREE DU CURSEUR+COMMANDE. SIMULM: EQU $ < LA 1ERE COMMANDE EST SIMULEE ('M'). LXI 0 < INDEX 1ERE COMMANDE. LOOP1: EQU $ CPZ &ACOM < EST-CE LA FIN DE LISTE ??? JG LOOP2 < NON, OK. LA AM1 < OUI, ERREUR. BSR APRINT < ENVOI MESSAGE D'ERREUR. JMP LOOP < ET ON RECOMMENCE. LOOP2: EQU $ CP &ACOM < LA COMMANDE (A) EST-ELLE < LA COMMANDE COURANTE (X) ??? JNE LOOP3 < NON. ADRI 1,X < OUI, ON VA DONC LA BR &ACOM < TRAITER... LOOP3: EQU $ ADRI 2,X < INDEX COMMANDE SUIVANTE. JMP LOOP1 < ET ON REANALYSE... < < FIN D'ANALYSE : < GENF: EQU $ CPZ IGRAPH < ENVOI EN ZDC ??? JNE ANA30 < NON. STZ SEG+0 < OUI, ON ENVOIE 'OAB'. STZ SEG+1 STZ SEG+2 STZ SEG+3 BSR ASTORE < ENVOI DU 'OAB' DANS ZDC. ANA30: EQU $ BR AGOGE < C'EST FINI... < < R E T O U R A U C C I : < GENCCI: EQU $ LAD DEMCCI SVC 0 BR ALOOP < RETOUR SI !GO... < < C O M M A N D E S D E M O D E : < GENS: EQU $ LAI -3 < MODE 'SET'. JMP GEN10 GENR: EQU $ LAI -2 < MODE 'RESET'. JMP GEN10 GENI: EQU $ LAI -1 < MODE 'INVER'. GEN10: EQU $ STA MODE < MISE EN PLACE DU MODE. BR ALOOP < VERS LA COMMANDE SUIVANTE. IF ORDI-"S",XWOR%,,XWOR% < < < C H O I X 3 / 8 C O U L E U R S : < < GENMOD: EQU $ PSR X,Y < SAUVEGARDES... LA AM21 BSR APRINT < MESSAGE, LAD DEMIN SVC 0 < ENTREE DU MODE, LYI 4 BSR AHEX < ET CONVERSION BINAIRE... PLR X,Y JNE GENMOD < ERREUR DE SYNTAXE... JAL GENMOD < MAUVAIS MODE... CPI LVIDEO JG GENMOD < MAUVAIS MODE... PSR X LR A,X LA &AVIDEO STA MODEV < ET MEMORISATION DU MODE : < =0 : ANCIEN MODE (3 COULEURS), < #0 : NOUVEAU MODE (8 COULEURS). PLR X LA INDM TBT 15 < LA ZONE SCRATCH EST-ELLE ACTIVE ??? JC GENM < OUI, ON LA DESACTIVE... BR ALOOP < NON, VERS L'INTERPRETEUR... < < < C H O I X D E L A C O U L E U R : < < GENCOL: EQU $ PSR X,Y < SAUVEGARDES... LA AM20 BSR APRINT < MESSAGE, LAD DEMIN SVC 0 < ENTREE DU COULEUR, LYI 4 BSR AHEX < ET CONVERSION BINAIRE... PLR X,Y JNE GENCOL < ERREUR DE SYNTAXE... JAL GENCOL < MAUVAIS COULEUR... CPI 1>NCOOL-1+1 JG GENCOL < MAUVAIS COULEUR... STA COLOR < ET MEMORISATION DE LA COULEUR... BR ALOOP < ET VERS L'INTERPRETEUR... XWOR%: VAL 0 < < O R I G I N E D ' U N S E G M E N T : < GENA: EQU $ LA POINT+X STA DICOX1 < ORIGINE X(M1). LA POINT+Y STA DICOY1 < ORIGINE Y(M1). BR ALOOP < VERS LA COMMANDE SUIVANTE. < < E X T R E M I T E D ' U N S E G M E N T : < GENE: EQU $ < COMMANDE 'S'. GENB: EQU $ LA POINT+X STA DICOX2 < EXTREMITE X(M2). LA POINT+Y STA DICOY2 < EXTREMITE Y(M2). IF ORDI-"T",XWOR%,,XWOR% LX MODE LA &LRR < MISE EN PLACE DE LA ROUTINE STA APOINT < DE TRAITEMENT REEL. BSR ATRACE < TRACE REEL DE M1M2. LA &LRV < MISE EN PLACE DE LA ROUTINE STA APOINT < DE TRAITEMENT VIRTUEL. BSR ATRACV < TRACE VIRTUEL DE M1M2. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR ATRACE < TRACE REEL. BSR ATRACV < TRACE IMAGE2 ("SCRATCH"). XWOR%: VAL 0 LBY CURSOR < RECUPERATION DE LA COMMANDE. CPI "B" < DISCRIMINATION 'B'/'S' ??? JE GENA < 'B' : ON FAIT UN 'A' IMPLICITE. BR ALOOP < 'S' : COMMANDE SUIVANTE. < < T R A C E P O I N T S I S O L E S : < GEN2: EQU $ LAI -1 < MODE 'INVER'. JMP GEN11 GEN0: EQU $ LAI -2 < MODE 'RESET'. JMP GEN11 GEN1: EQU $ LAI -3 < MODE 'SET'. GEN11: EQU $ STA SAVE < SAVE PROVISOIRE. LA DICOX1 LB DICOY1 LX DICOX2 LY DICOY2 PSR A,B,X,Y < SAVE M1 ET M2. LA POINT+X STA DICOX1 < M1 ET STA DICOX2 < M2 SONT CONFONDUS. LA POINT+Y STA DICOY1 < M1 ET STA DICOY2 < M2 SONT CONFONDUS. IF ORDI-"T",XWOR%,,XWOR% LX SAVE < RECUPERATION DU MODE DEMANDE. LA &LRR < ROUTINE DE TRAITEMENT REEL. STA APOINT BSR ATRACE < TRACE REEL DE M, ET ZDC EVENTUEL. LA &LRV < ROUTINE DE TRAITEMENT VIRTUEL. STA APOINT BSR ATRACV < TRACE VIRTUEL DE M. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% < SAUVEGARDE MODE COURANT, ET ON LUI SUBSTITUE ('SAVE'). LA SAVE XM MODE STA SAVE BSR ATRACE < TRACE REEL. BSR ATRACV < TRACE IMAGE2 ("SCRATCH"). < RESTAURATION DU MODE COURANT. LA SAVE XM MODE STA SAVE XWOR%: VAL 0 PLR A,B,X,Y < RESTAURE M1 ET M2. STY DICOY2 STX DICOX2 STB DICOY1 STA DICOX1 BR ALOOP < VERS LA COMMANDE SUIVANTE. < < T A I L L E D E S S P I R A L E S : < GENT: EQU $ LA AM5 < MESSAGE A EMETTRE. BSR APAS < ENTREE DE LA NOUVELLE TAILLE. STA NM BR ALOOP < ET C'EST TOUT... < < R A Z I M A G E R E S I D E N T E : < GENZ: EQU $ LX ALIMAG GEN40: EQU $ STZ &AIMAG JDX GEN40 IF ORDI-"S",XWOR%,,XWOR% LAD STABIL < VISUALISATION IMAGE RAZEE. SVC 0 XWOR%: VAL 0 BR ALOOP < VERS LA COMMANDE SUIVANTE. < < G E N E R A T I O N D E S V O L E T S : < GENW: EQU $ LAI 0 JMP GEN20 GENV: EQU $ LAI 1 GEN20: EQU $ STA ITEST < MODE DE TEST DES POINTS REELS. LY NLIG < BALAYGAE VERTICAL. E1001: EQU $ LX NPPL < BALAYAGE HORIZONTAL. E1002: EQU $ BSR ATEST < TEST REEL DU POINT (X,Y). JC E1003 < ON A TROUVE LE DERNIER < POINT DE LA LIGNE (Y). ADRI -1,X CPZR X < EST-ON AU DEBUT DE LIGNE ??? JGE E1002 < NON... E1004: EQU $ ADRI -1,Y < CHANGEMENT DE LIGNE. CPZR Y < EST-CE FINI ??? JGE E1001 < NON. BR ALOOP < OUI, COMMANDE SUIVANTE. < < CAS DU DERNIER POINT D'UNE LIGNE : < E1003: EQU $ LR X,B < SAVE SON ABSCISSE DANS B. LXI 0 < BALAYONS LA LIGNE (Y) < EN PARTANT DE LA GAUCHE. E1005: EQU $ BSR ATEST < TEST REEL DU POINT (X,Y). JC E1006 < ON A TROUVE LE 1ER POINT < DE LA LIGNE (Y). ADRI 1,X < POINT SUIVANT. JMP E1005 < PAS DE TEST DE FIN, CAR ON < SAIT QU'IL Y A AU MOINS UN < POINT SUR CETTE LIGNE. < < CAS DU 1ER POINT BLANC D'UNE LIGNE : < E1006: EQU $ STX DICOX1 < X(M1), STY DICOY1 < Y(M1). STB DICOX2 < X(M2), STY DICOY2 < Y(M2). IF ORDI-"T",XWOR%,,XWOR% LX MODE < MODE DE TRAITEMENT. LA &LRR < TRAITEMENT REEL. STA APOINT BSR ATRACE < REMPLISSAGE REEL, ET ZDC EVENTUEL. LA &LRV < TRAITEMENT VIRTUEL. STA APOINT BSR ATRACV < REMPLISSAGE VIRTUEL. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR ATRACE < TRACE REEL. BSR ATRACV < TRACE IMAGE2 ("SCRATCH"). XWOR%: VAL 0 JMP E1004 < VERS LA LIGNE PRECEDENTE. < < < B A S C U L E Z O N E S C R A T C H : < < GENM: EQU $ LA AM6 BSR APRINT LA INDM IBT 15 < INVERSION DE L'ETAT. TBT 15 < VIENT-ON D'ACTIVER ??? JNC GENM3 < NON... CPZ MODEV < OUI : 3 OU 8 COULEURS ??? JE GENM3 < 3, OK, ANCIEN MODE... LA AM1 < 8 : ON INTERDIT LA ZONE SCRATCH... BSR APRINT < MESSAGE D'ERREUR !!! BR ALOOP < VERS L'INTERPRETEUR... GENM3: EQU $ STA INDM TBT 15 < TEST DU NOUVEL ETAT ??? LA AM7 < 'ON' A PRIORI. JC GENM1 < OUI, C'EST ON... LA AM8 < ET NON, C'EST OFF... IF ORDI-"S",XWOR%,,XWOR% BSR APRINT LAI 2 < SENS DE L'ECHANGE = ECRITURE. BSR AEDKS < IMAGE2 --> DK SCRATCH. LAD DEMMEM < ET 8K SEULEMENT... SVC 0 JMP GENM2 XWOR%: VAL 0 GENM1: EQU $ BSR APRINT < MESSAGE D'ETAT. IF ORDI-"S",XWOR%,,XWOR% LAD DEMM12 < IL FAUT 12K MOTS. SVC 0 LAI 0 < SENS DE L'ECHANGE = LECTURE. BSR AEDKS < DK SCRATCH --> IMAGE2. GENM2: EQU $ XWOR%: VAL 0 BR ALOOP < VERS L'INTERROGATION... IF ORDI-"S",XWOR%,,XWOR% < < < A C T I V A T I O N D ' U N E C O M P O S A N T E : < < GEN5: EQU $ LBI TVPR+TVIN < ROUGE. JMP GEN100 GEN6: EQU $ LBI TVPV+TVIN < VERT. JMP GEN100 GEN7: EQU $ LBI TVPB+TVIN < BLEU. GEN100: EQU $ STB STABIL+3 < LIRE LA COMPOSANTE. LAD STABIL SVC 0 NBTVIN: VAL TVIN=0 NBTVIN: VAL 15-NBTVIN RBT 16+NBTVIN < REPASSER EN DIFFUSION. STB STABIL+3 BR ALOOP < VERS L'INTERROGATION... XWOR%: VAL 0 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#