NMPROC: VAL "KQ" < NOM DU PROCESSEUR. XXXEXT: VAL 0 < PARCOURS EXTERIEUR (SUR LE NOIR, LE < LONG DU BLANC) ; SI 1, LE CONTRAIRE. IDP "KQ - RELEASE 20/11/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 < < < I M A G E S G R A P H I Q U E E T V I D E O : < SIZE: VAL '528 < TAILLE PRESUMEE DU PROGRAMME. < < PILE DU PROGRAMME : < SSTACK: VAL 16 STACK: EQU ITEM2 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 PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < MESSAGES : < M3: BYTE 13;'6D ASCI "POINT ISOLE!" M8: BYTE 9;'6D ASCI "CONTOUR?" M9: BYTE 5;'6D ASCI "ZDC?" M10: BYTE 20;'6D ASCI "OAB INTERMEDIAIRES?" M11: BYTE 10;'6D ASCI "MARQUAGE? " NOMSEG: WORD 0 < 0=INVALIDE, < -1=VALIDE. SEG: DZS 4 LONSEG: VAL $-NOMSEG*2 SEGORG: EQU SEG+0 SEGEXT: EQU SEG+2 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 '8000 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 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 STOGS: WORD '000A < EMISSION SEGMENT COURANT. WORD NOMSEG-ZERO*2 WORD LONSEG WORD 'FFC0 < VALIDATION DE LA ZDC. GETGS: WORD '0008 < ACCES NOMSEG COURANT. WORD NOMSEG-ZERO*2 WORD SEG-NOMSEG*2 WORD 'C000 STABIL: WORD '8A01 < DEMANDE DE STABILISATION VIDEO. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD TVPV < SUR LE PROCESSEUR VERT. < < CONSTANTES : < TROIS: WORD 3 MASK1: WORD '7F7F < MASQUE DE RECHERCHE DE CERTAINES MASK2: WORD 'DDFF < PATTERNS DANS LES CARRES 3*3 : VAL11: WORD '6400 VAL12: WORD '1300 VAL21: WORD 'D000 VAL22: WORD '0580 NOM1: WORD "-+" < NOM DE L'IMAGE DE TRAVAIL, < DANS LAQUELLE ON GENERE < L'IMAGE FINALE. < SUIVIS DE L'IDESC). KIN: WORD -1 < COMPTEUR DES ENTRIES DANS KO. NGE: WORD "GE" < NOM DU PROCESSEUR GE. IGRAPH: WORD 1 < 0=EMISSION GRAPHIQUE, < 1=PAS D'EMISSION GRAPHIQUE. IOAB: WORD 1 < 0 : OAB INTERMEDIAIRES, < 1 : OAB A LA FIN... IMARK: WORD 1 < 0 : MARQUAGE SUCCESIF DES POINTS DE < CHAQUE CONTOUR EN VERT, < 1 : PAS DE MARQUAGE... 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. YMIN: WORD 0 < DERNIERE LIGNE A TESTER LORS < DES BALAYAGES DE L'IMAGE < POUR ELIMINER LES POINTS < 0-ISOLES ET 1-ISOLES. YMAX: WORD 0 < DE MEME : PREMIERE LIGNE... 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. DEP: WORD 0;0 < POINT DE DEPART D'UN CONTOUR. PTC: WORD 0;0 < POINT COURANT LORS D'UN PARCOURS. SUC: WORD 0;0 < SUCCESSEUR DU POINT COURANT (X,Y). NREMPL: WORD 0 < NOMBRE DE REMPLACANTS ATTEN- < DUS POUR LE POINT COURANT. REMP: WORD 0;0 < FUTUR REMPLACANT DU POINT < COURANT SUR LE CONTOUR LORS DE < SON PARCOURS. NPILR: WORD 0 < NBRE DE POINTS A DEPILER < DE LA PILE 'PILR'. APILR: WORD 0 < REALI COURANT VERS PILR. PILR: EQU $ < POUR EMPILER M1, M2, M3, PTC. CDAP: ASCI "!CDA" BYTE "P";'04 DCDAP: WORD 2 < DEMANDE D'ENVOI DE "!CDAP". WORD CDAP-ZERO*2 WORD 80 DZS 4*2+PILR-$ < SUITE ET FIN DE 'PILR' QUI EST EN < RECOUVREMENT DE CE QUI PRECEDE... SDEP: WORD 0;0 < POINT DE DEPART POUR LE TOUR < SUIVANT (FUTUR 'DEP'). POINT1: WORD 0;0 < CONTIENT UN POINT QUE L'ON SAIT < SAIT ETRE A 1 LORS DE LA < RECHERCHE DES VOISINS. IF XXXEXT,XWOR%,,XWOR% POINTD: WORD 0;0 < POINT NOIR PRECEDENT. XWOR%: VAL 0 VX: WORD 1 < COORDONNEES X ET Y DU VY: WORD 0 < VECTEUR DEPLACEMENT. SVX: WORD 0 < SAVE VX. SVY: WORD 0 < SAVE VY. TEMPO: WORD 5*2 < NOMBRE DE CLIGNOTEMENTS VIDEO. KOMPT: WORD 0 < COMPTEUR DES POINTS MIS A 1, < LORS D'UN PARCOURS DE REM- < PLISSAGE. PKOMPT: WORD -1 < KOMPT DU TOUR PRECEDENT. OSCIL: WORD 0 < COMPTEUR DES OSCILLATIONS. MOSCIL: WORD 8 < MAX DE OSCIL... KDIFF: WORD 0 < COMPTAGE DES DIFFERENCES ENTRE < L'IMAGE AVANT ET APRES L'AJOUT < DU NOUVEAU CONTOUR INTERNE. DOUBLE: WORD 0 < COMPTEUR DES POINTS DOUBLES < D'UN PARCOURS. NISOL: WORD 0 < NOMBRE DE POINTS ISOLES, < OU SIMPLEMENT RATTACHES < RECONTRES AVANT CHAQUE < PARCOURS. TRAME: WORD 'FFFF < POUR EVENTUELLEMENT DONNER < DU VOLUME A L'IMAGE FINALE... INDIC: WORD 0 < RESULTAT (0/1) DES TESTS < VIRTUELS. ANGLE: WORD 0 < SOMMATION DES ROTATIONS < PARTIELLES 'ROT1' ET 'ROT3' : < +1 : +PI/2 (ROT1), < -1 : -PI/2 (ROT3). SANGLE: WORD 0 < SAUVEGARDE TEMPORAIRE DE < L'ANGLE COURANT LORS DES < RECHERCHES DE VOISINS. PREM: WORD 1 < 1 : 1ER POINT DE L'IMAGE < NON ENCORE RENCONTRE, < 0 SINON. ICONTO: WORD 0 < 0 : JUSTE LES CONTOURS, < 1 : DE PLUS, LES REMPLIR... WORK: WORD 0 < VARIABLE DE TRAVAIL POUR 'CDA'. IF XXXEXT,,XWOR%, IEXT: WORD 0 < 0 : 'VOISI' TRACE LE POINT (X,Y). XWOR%: VAL 0 < < RELAIS DIVERS : < ANOM1: WORD NOM+0 < POUR METTRE LE NOM I1/I2, ANOM2: WORD NOM+1 < POUR METTRE L'IDESC/EOT. 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. ASET: WORD SET < MISE D'UN POINT A 1. ASETM: WORD SETM < MISE A 1 ET VISUALISATION VERT. ARESET: WORD RESET < MISE D'UN POINT A 0. AINVER: WORD INVER < INVERSION D'UN POINT. ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT. ATESTS: WORD TESTS < TEST UN POINT ET MEMORISE, ATEST3: WORD TEST3 < TEST 3 POINTS ALIGNES ET MEMORISE. 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. AOSR: WORD OSR < OPERATION SCRATCH-RESIDENT... AVOSR: WORD VOSR < INSTRUCTION VARIABLE... AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. AEXIST: WORD EXIST < EXISTENCE D'UN POINT. AVOISI: WORD VOISI < TEST ET COMPTAGE D'UN VOISIN. APILE: WORD PILE-1 < PILE DE SMC. ASTACK: WORD STACK-1 < PILE DE KO. AI2: WORD ITEM2-1,X < RELAI DE RAZ ITEM1+ITEM2. ASEND: WORD SEND < EMISSION SEGMENT COURANT < ET ATTENTE D'ACQUITTEMENT. ASENDO: WORD SENDO < INSERTION POINT DE DEPART. AGOGE: WORD GOGE < RETOUR A GE. ASUP1: WORD SUP1 < BOUCLE GENERALE... ALOOP: WORD CONT18 < PARCOURS DU CONTOUR COURANT. APRINT: WORD PRINT < EDITION DES MESSAGES. AMOV: WORD MOV < DEPLACEMENT PAR (VX,VY). AROT1: WORD ROT1 < ROTATION DE +PI/2. AROT3: WORD ROT3 < ROTATION DE -PI/2. ASAVDP: WORD SAVDEP < SAUVEGARDE DU SUCCESSEUR DU < POINT COURANT. AREMPL: WORD REMPL < SAUVEGARDE D'UN REMPLACANT < POSSIBLE DU POINT COURANT. ASPILR: WORD SPILR < RANGEMENT DE (X,Y) DANS PILR. ASUCC: WORD SUCC < RECHERCHE D'UN SUCCESSEUR < POSSIBLE DU POINT COURANT. ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH < EN MEMOIRE. ACONTO: WORD CONTO < INVERSE DE 'CONTI'. ARCDA: WORD RCDA < RESIDENT <-- CDA, AWCDA: WORD WCDA < CDA <-- RESIDENT. ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK. AVTV: WORD VTV < ACCES MEMOIRES TV... < < TOPOGRAPHIE MEMOIRE : < NSEC: VAL LIMAG/128 < NRE DE SECTEURS POUR UNE IMAGE. XSECR: VAL 2*LTNI-128-128 < A CAUSE DE 'SECTOR'... NSECR: VAL XSECR/128 < NBRE DE SECTEURS RESIDANTS. 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 XWOR%1: VAL '0000000@@@@ XWOR%2: VAL -1 XXXBUF: VAL XWOR%1>XWOR%2 < ADRESSE DU PREMIER BUFFER. IF SECTOR-ZERO+128-XXXBUF,XWOR%,XWOR%, IF ATTENTION : ERREUR DANS LES BUFFERS !!! XWOR%: VAL 0 < @OCTET DU 1ER BUFFER LIBRE. 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 SECTOR+128 < < LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) : < TOPO: EQU LSECT+NSEC < < COMPTEUR D'USAGE DES BUFFERS : < USE: EQU TOPO+NSECR < < VALIDATION IMPLANTATION : < IF USE-ZERO+NSECR-XXXBUF,XWOR%,XWOR% IF ATTENTION : RECOUVREMENT !!! XWOR%: VAL 0 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 PAGE < < < A C C E S M E M O I R E S T V : < < < ARGUMENT : < A=COULEUR, ET SENS... < < VTV: EQU $ PSR A,X STA STABIL+3 LAD STABIL SVC 0 < EXECUTION DE L'ORDRE... PLR A,X RSR PAGE < < < E M I S S I O N S E G M E N T C O U R A N T : < < < FONCTION : < CETTE ROUTINE EMET, SI CELA A ETE < DEMANDE PAR L'UTILISATEUR LE SEGMENT < COURANT A L'AIDE DE LA ZDC, ET ATTEND < L'ACCUSE DE RECEPTION... < < < ARGUMENT : < X,Y=COORDONNEES DU POINT COURANT (SEGEXT). < < SEND: EQU $ CPZ IGRAPH < GRAPHIQUE DEMANDE ??? JNE SEND1 < NON, RIEN A FAIRE. < < GENERATION DE LA NOUVELLE SEGEXT : < LA SEGEXT+X STA SEGORG+X LA SEGEXT+Y STA SEGORG+Y LR Y,A < Y COURANT, SB NLIG < LES AXES GRAPHIQUES ET NGR A,A < VIDEOS SONT INVERSES. SLLS DEDY STA SEGEXT+Y LR X,A < X COURANT, SLLS DEDX < ET CADRAGE. STA SEGEXT+X PSR X < A CAUSE DES SVC A SUIVRE. < < EMISSION DU SEGMENT COURANT : < SEND2: EQU $ LAD GETGS SVC 0 < ACCES A LA VALIDATION COURANTE. CPZ NOMSEG JNE SEND2 < SEGMENT PRECEDENT NON ENCORE < ACQUITTE, ON ATTEND !!! DC NOMSEG < OK, NOMSEG=-1. LAD STOGS SVC 0 < EMISSION SEGMENT COURANT. PLR X < RESTAURE X. SEND1: EQU $ RSR < < < I N S E R T I O N P O I N T D E D E P A R T : < < SENDO: EQU $ CPZ IGRAPH < GRAPHIQUE DEMANDE ??? JNE SENDO1 < NON... LR Y,A < OUI, CONVERSION VIDEO SB NLIG < GRAPHIQUE DES COORDONNEES NGR A,A < DU POINT DE DEPART (X,Y). SLLS DEDY STA SEGEXT+Y LR X,A SLLS DEDX STA SEGEXT+X SENDO1: EQU $ RSR PAGE < < < R O T A T I O N D E ( VX , VY ) : < < < FONCTION : < CES 2 ROUTINES MULTIPLIENT LE NBRE < COMPLEXE (VX,VY) PAR LES NOMBRES < COMPLEXES I=(0,1) ET -I=(0,-1) < RESPECTIVEMENT. < < ROT1: EQU $ IC ANGLE < ROTATION DE +PI/2. PSR A,B LA VX LB VY NGR B,B ROT: EQU $ STB VX STA VY PLR A,B RSR ROT3: EQU $ DC ANGLE < ROTATION DE -PI/2. PSR A,B LA VX LB VY NGR A,A JMP ROT < VERS VX<--(B), VY<--(A). < < < D E P L A C E M E N T D U P O I N T C O U R A N T : < < < FONCTION : < CETTE ROUTINE DEPLACE LE POINT < COURANT (X,Y) A L'AIDE DU VECTEUR < DEPLACEMENT (VX,VY). < < < ARGUMENT : < X ET Y = L'X ET L'Y DU POINT. < < MOV: EQU $ PSR A,B LA VX LB VY ADR A,X < X <-- X+VX. ADR B,Y < Y <-- Y+VY. PLR A,B RSR PAGE < < < S A U V E G A R D E D U D E P L A C E M E N T < F U T U R : < < < FONCTION : < CETTE ROUTINE SAUVEGARDE LE POINT < (X,Y) EN TANT QUE FUTUR DEPLACEMENT, < LE VECTEUR (VX,VY), FAIT UN RETOUR AU < POINT COURANT PTC, ET INITIALISE < UN COMPTEUR DE REMPLACANTS (B). < < < ARGUMENT : < X,Y = POINT FUTUR. < A=NBRE DE REMPLACANTS ATTENDUS POUR LE PTC. < < < RESULTAT : < B=0. < < SAVDEP: EQU $ STA NREMPL < NOMBRE DE REMPLACANTS < ATTENDUS POUR LE POINT COURANT. STX SUC+X < SAUVEGARDE DU SUCCESEUR STY SUC+Y < DU POINT COURANT. LA VX STA SVX < SAUVEGARDE DU VECTEUR LA VY < DEPLACEMENT MENANT AU STA SVY < SUCCESSEUR 'SUC'. LX PTC+X < ET RETOUR AU POINT LY PTC+Y < COURANT. LBI 0 < INITIALISATION DU COMPTEUR. RSR < < < M A R Q U A G E D ' U N R E M P L A C A N T < A G A U C H E : < < < FONCTION : < CETTE ROUTINE REGARDE A GAUCHE < DU POINT (X,Y) ARGUMENT (SUIVANT < LE SENS DU VECTEUR (VX,VY)); SI < LE POINT AINSI VU EST A 0, IL EST < MARQUE VIRTUELLEMENT A 1. < < < ARGUMENT : < X,Y = UN POINT. < < < RESULTAT : < B <-- (B)+1 SI UN REMPLACANT A ETE TROUVE, < DE MEME POUR 'KOMPT'. < < REMPL: EQU $ BSR AROT3 < ON REGARDE A GAUCHE, BSR AMOV < ET ON SE DEPLACE DANS CETTE < DIRECTION. STZ ITEST < POUR LA RECHERCHE DE POINTS A 0. BSR AXISTV < TEST VIRTUEL DU POINT VU < A GAUCHE. JANE REMPL1 < N'EXISTE PAS, OU EST A 1. < < CAS OU UN REMPLACANT A GAUCHE A ETE TROUVE : < BSR AEXIST < EST-IL A 1 SUR LE CONTOUR < COURANT ??? JANE REMPL2 < OUI, ON NE LE COMPTE DONC PAS !!! IC KOMPT < COMPTAGE GLOBAL (AU COURS < DE CE TOUR) DE CELUI-CI, REMPL2: EQU $ ADRI 1,B < ET COMPTAGE LOCAL (RELATIVE- < MENT AU POINT COURANT PTC). BSR ASPILR < EMPILEMENT DE (X,Y). STX REMP+X < ET ENFIN, ON LE SAUVEGARDE STY REMP+Y < NON RECURSIVEMENT. REMPL1: EQU $ RSR < < < E M P I L E M E N T D A N S P I L R : < < < ARGUMENT : < X,Y= POINT A EMPILER. < < SPILR: EQU $ STX &APILR IC APILR < PROGRESSION POINTEUR DE PILR. STY &APILR IC APILR < PROGRESSION POINTEUR DE PILR. RSR < < < R E C H E R C H E D ' U N S U C C E S S E U R < D E L A D R O I T E V E R S L A G A U C H E : < < < FONCTION : < CETTE ROUTINE TOURNE DE LA < DROITE VERS LA GAUCHE AUTOUR < DU POINT COURANT, ET TESTE < SI LE POINT AINSI VU EXISTE < ET EST A 1. < < SUCC: EQU $ LX PTC+X < ON SE REPLACE SUR LE LY PTC+Y < POINT COURANT PTC. BSR AROT3 < ROTATION VERS LA GAUCHE. BSR AMOV < ET DEPLACEMENT VERS LA < GAUCHE. STZ ITEST IC ITEST < POUR TESTER DES POINTS A 1. BSR AEXIST < TEST DU POINT VU A GAUCHE. 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 $ SBT 0,X 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 $ BSR ASEND < EMISSION POSSIBLE DU < SEGMENT COURANT. 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, PAS DE MISE A JOUR... STA &ASECTC < NON, 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 : < STX CSECT < SAUVEGARDE DE (X). LXI NSECR 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 VIRT6 < 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). 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 IC &AUSE < COMPTAGE DES UTILISATIONS. PLR X,Y RSR < < < 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 < < < O P E R A T I O N S C R A T C H - R E S I D E N T : < < < ARGUMENT : < A=OPERATION VARIABLE... < < OSR: EQU $ PSR A,B,X STA &AVOSR < OPERATION VARIABLE... STZ RDK+3 < ON COMMENCE SUR LE 0... LA AIMAG STA AIMAG0 < INITIALISATION DU POINTEUR 'RESIDENT'. LXI LIMAG/128 < NOMBRE DE SECTEURS... XEOR1: EQU $ PSR X LB RDK+3 BSR ARESID < ACCES AU SECTEUR (B). LA ASECTC ADRI -1,A < CALCUL DU RELAI D'ACCES AU SECTEUR STA ASECTC < COURANT (B) PAR 'JDX'. LXI 128 < NOMBRE DE MOTS/SECTEURS. XEOR2: EQU $ LA &ASECTC VOSR: JMP $ < INSTRUCTION VARIABLE STA &AIMAG0 JDX XEOR2 LAI 128 AD AIMAG0 STA AIMAG0 IC RDK+3 < AU SECTEUR SUIVANT... PLR X JDX XEOR1 PLR A,B,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 E S I D E N T --> S C R A T C H : < < CONTO: EQU $ PSR A,B,X,Y STZ WDK+3 < DEPART SUR LE SECTEUR 0. LRM Y < Y EST LA BASE COURANTE DE L'IMAGE. WORD IMAG LXI LIMAG/128 < X=NOMBRE DE SECTEURS... CONTO1: EQU $ PSR X LB WDK+3 < B=NUMERO DU SECTEUR COURANT, BSR ARESID < QUE L'ON REND RESIDENT... LX WDK+3 LB &ALSECT < B=ADRESSE DE SON BUFFER (RECEPTEUR), LR Y,A < A=EMETTEUR (MORCEAU D'IMAGE), LXI 128 < X=NOMBRE DE MOTS A DEPLACER, ADR X,Y < Y=MORCEAU D'IMAGE SUIVANT... MOVE < ENVOI DE L'IMAGE EN SCRATCH... PLR X IC WDK+3 < SECTEUR SUIVANT... JDX CONTO1 PLR A,B,X,Y 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 < < < A C C E S A L A C D A : < < RCDA: EQU $ < RESIDENT <-- CDA. PSR A,B,X LRM A,B,X WORD 0 < A=EMETTEUR EN CDA, WORD IMAG < B=RECEPTEUR RESIDENT, WORD LIMAG < X=LONGUEUR DE L'IMAGE. RCDA PLR A,B,X RSR WCDA: EQU $ < CDA <-- RESIDENT. PSR A,B,X LRM A,B,X WORD 0 < A=RECEPTEUR EN CDA, WORD IMAG < B=EMETTEUR RESIDENT, WORD LIMAG < X=LONGUEUR DE L'IMAGE. WCDA PLR A,B,X 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 < < < M I S E A 1 E T M A R Q U A G E B L E U : < < SETM: EQU $ CPZ IMARK < MARQUAGE ??? JNE SETM1 < NON... PSR A BSR AINVER < MARQUAGE... LAI TVPB BSR AVTV < VISUALISATION BLEU... BSR AINVER < ET EFFACEMENT... LAI TVPB BSR AVTV PLR A SETM1: EQU $ 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 < < < T E S T E T M E M O R I S E : < < < FONCTION : < CE SOUS-PROGRAMME TESTE LE POINT < COURANT (X,Y) ; SI CE DERNIER EST < A 1, ALORS, IL MARQUE DANS LE REGISTRE < 'B' LE BIT DE RANG 'W' ; ENFIN IL < INCREMENTE 'W'. < < TESTS: EQU $ BSR ATEST < TEST DE M(X,Y). JNC TESTS1 < POINT A 0... XR X,W SBT 16,X < MARQUAGE... XR X,W TESTS1: EQU $ ADRI 1,W < PROGRESSION DE L'INDEX... RSR < < < T E S T 3 P O I N T S A L I G N E S : < < < FONCTION : < IDEM A 'TESTS' MAIS SUR 3 < POINTS ALIGNES HORIZONTALEMENT < ET CONSECUTIFS... < < TEST3: EQU $ BSR ATESTS < M(X,Y). ADRI 1,X BSR ATESTS < M(X+1,Y). ADRI 1,X BSR ATESTS < M(X+2,Y). ADRI -2,X < RETOUR EN PREMIERE COLONNE, ADRI 1,Y < ET CHANGEMENT DE LIGNE.. RSR PAGE < < < C O M P T A G E D ' U N V O I S I N : < < < FONCTION : < CETTE ROUTINE INCREMENT B D'UNE UNITE < SI LE POINT (X,Y) EXISTE ET EST A 1. < < < ARGUMENT ET RESULTAT : B,X,Y ET A=0 SI UN POINT TRACE. < < VOISI: EQU $ BSR AEXIST < TEST DU POINT (X,Y) JANE VOISI1 < (X,Y) N'EXISTE PAS OU EST A 0. ADRI 1,B < (X,Y) EXISTE ET EST A 1. STX POINT1+X < SAUVEGARDE D'UN POINT A 1. STY POINT1+Y < UTILISE PAR LES CHANGEMENTS < DE POINT DE DEPART). IF XXXEXT,,XWOR%, LAI 1 < PAS DE TRACE A PRIORI... CPZ IEXT < ??? JNE VOISI1 < PAS DE TRACE. BSR ASETV < ON TRACE (X,Y)... LAI 0 < ET ON LE MEMORISE... XWOR%: VAL 0 VOISI1: EQU $ RSR < < < 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). PAGE < < < R E T O U R A ' G E ' : < < GOGE: EQU $ BSR ARCDA < RESIDENT <-- CDA. < < NOTA : SI IOAB=0, ON ENVOIE MALGRE < TOUT UN OAB BIEN QU'AUCUN SEGMENT < N'AIT ETE TRANSMIS DEPUIS LE DER- < NIER OAB INTERMEDIARE : < STZ SEGEXT+X STZ SEGEXT+Y LXI 0 LY NLIG BSR ASEND < EMISSION POSSIBLE D'UN SEGMENT < REDUIT A UN POINT DOUBLE < ORIGINE GRAPHIQUE. GOGEX: EQU $ < ENTRY ALT-MODE. LAD DELI SVC 0 < DELETE L'IMAGE 'I1'. BSR AVIRE < TOUTE L'IMAGE VIRTUELLE EST < RENVOYEE EN SCRATCH AVANT < LE RETOUR A 'GE'. < < 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 < < < R E M P L I S S A G E D ' U N C O N T O U R : < < < < FONCTION : < CE PROCESSEUR, EXTRAIT TOUS LES < CONTOURS DE L'IMAGE RESIDENTE, ET < EVENTUELLEMENT LES REMPLIT ; DE PLUS < ROUGE --> IMAGE ARGUMENT, < VERT --> IMAGE REMPLIE, < BLEU --> CONTOURS. < RESIDENT --> CONTOURS REMPLIS EVENTUELLEMENT, OU NOIR. < < 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 DCDAP SVC 0 < ENVOI DE "!CDAP"... LAD DEMMEM SVC 0 WORD '1E45 < RENVOIE : A=IDESC. ADRI '30,A < CONVERSION ASCI. SWBR A,A ORI '04 < QUE L'ON FAIT SUIVRE DE EOT. STA &ANOM2 < ET QUE L'ON MET DERRIERE I1/I2. LA NOM1 STA &ANOM1 < FIN DE GENERATION DU NOM < DE L'IMAGE DE TRAVAIL. LAD DELI SVC 0 < QUE L'ON DETRUIT AU PREALABLE, < ON NE SAIT JAMAIS... < < INITIALISATION DES TABLES : < LXI NSEC LAI -1 INIT1: EQU $ STA &ALS < 'LSECT'. JDX INIT1 LXI NSECR INIT2: EQU $ STZ &ATOPO < 'TOPO'. STZ &AUSE < 'USE'. JDX INIT2 BSR ARAZDK < NOIR --> SCRATCH... < < S U P P R E S S I O N D E S C O U L O I R S < N O I R S L A R G E D ' U N P O I N T : < SUPP40: EQU $ STZ KOMPT < RAZ DU COMPTEUR DES POINTS RAJOUTES. LYI 1 SUPP4: EQU $ LXI 1 SUPP1: EQU $ BSR ATEST < TEST M(X,Y). JNC SUPP20 < NOIR... BSR ASETV < BLANC, ON LE MARQUE... JMP SUPP2 SUPP20: EQU $ PSR X,Y,W LBI 0 < CLEAR LA LISTE DE POINTS A 1. EORR W,W < W=0, INDEX DES POINTS DANS 'B'. ADRI -1,X < POSITIONNEMENT SUR ADRI -1,Y < M(X-1,Y-1). STX PTC+X < QUE L'ON SAUVEGARDE... STY PTC+Y BSR ATEST3 < M(X-1,Y-1), M(X,Y-1), M(X+1,Y-1). BSR ATEST3 < M(X-1,Y), M(X,Y), M(X+1,Y). BSR ATEST3 < M(X-1,Y+1), M(X,Y+1), M(X+1,Y+1). LR B,A < A=LISTE DES POINTS A 1... AND MASK1 CP VAL11 < EST-CE UN COIN ??? JE SUPP11 < OUI, RIEN... CP VAL12 < COIN ??? JE SUPP11 < OUI, RIEN... LR B,A < A=LISTE DES POINTS A 1... AND MASK2 CP VAL21 < COIN ??? JE SUPP11 < OUI, RIEN... CP VAL22 < COIN ??? JE SUPP11 < OUI, RIEN... LR B,A LBI 0 < A,B=LISTE DES POINTS A 1... SUPP10: EQU $ DBT < RECHERCHE DU PREMIER POINT A 1 : JC SUPP11 < IL N'EXISTE PAS, OU FINI... RBT 0,X < OK, ON L'AFFACE DE LA LISTE... JAE SUPP11 < PLUS DE POINT A 1 DERRIERE LUI, < RIEN A FAIRE... LR X,W < W=INDEX DU PREMIER POINT A 1 < COURANT DANS LE CARRE 3*3... SUPP13: EQU $ ADRI 1,X TBT 0,X < RECHERCHE D'UN SUIVANT DE 'W' A 1... JC SUPP12 < OK... SUPP17: EQU $ XR A,X CPI 9-1 XR A,X JL SUPP13 < IL REST D'AUTRE POINT A TESTER < DERRIERE 'W'... JMP SUPP10 < NON, CHANGEMENT DU PREMIER POINT < A 1 COURANT... SUPP12: EQU $ PSR A,B,X,Y LR W,A < A=INDEX DU PREMIER POINT BLANC. SARD 16 DV TROIS PSR A,B < SAVE LE PREMIER POINT BLANC... LR A,Y < Y=DELTA(Y) PREMIER POINT BLANC, LR X,A < A=INDEX DU POINT BLANC COURANT... LR B,X < X=DELTA(X) PREMIER POINT BLANC. SARD 16 DV TROIS < A=DELTA(Y) POINT BLANC COURANT, < B=DELTA(X) POINT BLANC COURANT. SBR X,B < DISTANCE EN X ET EN Y ENTRE LES 2 SBR Y,A < POINTS BLANCS CONSIDERES... PSR A,B < SAVE CETTE DISTANCE... JAGE SUPP30 NGR A,A < EN VALEUR ABSOLUE... SUPP30: EQU $ CPZR B JGE SUPP31 NGR B,B < EN VALEUR ABSOLUE... SUPP31: EQU $ CPI 2 JE SUPP32 < OK, ELOIGNES DE 2 EN Y... LR B,A CPI 2 JE SUPP32 < OK, ELOIGNES DE 2 EN X... ADRI -4,K < A CAUSE DES PSR... JMP SUPP15 < RIEN A FAIRE... SUPP32: EQU $ PLR A SARS 1 LR A,X < X=ELOIGNEMENT/2 EN X... PLR A SARS 1 LR A,Y < Y=ELOIGNEMENT/2 EN Y. PLR A,B ADR A,Y < CALCUL D'UN POINT A MI-CHEMIN ADR B,X < DES 2 POINTS BLANCS... LA PTC+X LB PTC+Y ADR A,X ADR B,Y BSR ATEST < DEJA A 1 ??? JC SUPP15 < OUI, ON NE LE REMET PAS... BSR ASETV < MARQUAGE DE M(X,Y). IC KOMPT < COMPTAGE DES POINTS RAJOUTES... SUPP15: EQU $ PLR A,B,X,Y JMP SUPP17 < VERS LE CHANGEMENT DE POINT < BLANC COURANT... SUPP11: EQU $ PLR X,Y,W SUPP2: EQU $ ADRI 1,X LR X,A CP NPPL JL SUPP1 ADRI 1,Y LR Y,A CP NLIG JL SUPP4 BSR ACONTI < RECUPERATION DE L'IMAGE COMPLETEE, LAI TVPR BSR AVTV < QUE L'ON ENVOIE SUR LE ROUGE... BSR ARAZDK < PUIS ON RAZE LE SCRATCH... CPZ KOMPT < A-T'ON RAJOUTE DES POINTS ??? JNE SUPP40 < OUI, ALORS ON REMET CELA... < < E X T R A C T I O N D E S C O N T O U R S : < < < MARQUAGE ??? < GR1Y: EQU $ LAD M11 BSR APRINT LAD DEMREP SVC 0 LBY REP CPI "N" JE GR2Y < "N" : IMARK=1. CPI "O" JNE GR1Y < ??? STZ IMARK < "O" : IMARK=0. GR2Y: EQU $ < < EMISSION GRAPHIQUE ??? < GR1: EQU $ LAD M9 BSR APRINT < ENVOI MESSAGE. LAD DEMREP SVC 0 < LECTURE DE LA REPONSE. LBY REP < < REPONSES RECONNUES : < O : EMISSION GRAPHIQUE, < N : PAS D'EMISSION GRAPHIQUE. < CPI "N" JE GR2 < IGRAPH=1 : PAS D'EMISSION. CPI "O" JNE GR1 < ERREUR, ON RECOMMENCE. STZ IGRAPH < IGRAPH=0 : EMISSION. GR1X: EQU $ LAD M10 BSR APRINT LAD DEMREP SVC 0 LBY REP CPI "N" JE GR2X < "N" : IOAB=1. CPI "O" JNE GR1X < ??? STZ IOAB < "O" : IOAB=0. GR2X: EQU $ GR2: EQU $ CONT90: EQU $ STZ ICONTO < OUI A PRIORI (0)... CPZ IMARK < MARQUAGE ??? JE CONT60 < OUI, JUSTE LES CONTOURS... LAD M8 BSR APRINT LAD DEMREP SVC 0 LBY REP < A=REPONSE DE "CONTOUR" ??? CPI "O" JE CONT60 < OUI... IC ICONTO < NON A PRIORI (1)... CPI "N" JNE CONT90 < ERREUR !!! CONT60: EQU $ < < INITIALISATION TV : < BSR ACONTI < NOIR --> RESIDENT. LAI TVPB BSR AVTV < NOIR --> BLEU (FUTUR CUMUL DES CONTOURS). LAI TVPV BSR AVTV < NOIR --> VERT (FUTURS SQUELETTES). BSR AWCDA < CDA <-- NOIR. < < < B O U C L E G E N E R A L E : < < LXI 0 < POINT COURANT LYI 0 < A L'ORIGINE... SUP1: EQU $ STZ ITEST IC ITEST LAI TVPR?TVIN BSR AVTV < ARGUMENT --> RESIDENT. SUP5: EQU $ BSR ATEST JNC SUP3 < ON S'ARRETE SUR LE PREMIER 0... SUP6: EQU $ ADRI 1,Y < ON ELEMINE LES CHAINES LR Y,A < VERTICALES DE 1... CP NLIG JLE SUP5 LYI 0 ADRI 1,X LR X,A CP NPPL JLE SUP5 BR AGOGE < C'EST FINI... SUP4: EQU $ BSR ATEST < TEST DU POINT (X,Y) ??? JC SUP2 < A 1... SUP3: EQU $ < A 0, ON EN CHANGE... IF XXXEXT,XWOR%,,XWOR% STX POINTD+X < MEMORISATION DU DERNIER POINT STY POINTD+Y < NOIR RENCONTRE... XWOR%: VAL 0 ADRI 1,Y < CHANGEMENT DE LIGNE, LR Y,A CP NLIG < ??? JLE SUP4 LYI 0 < CHANGEMENT DE COLONNE... ADRI 1,X LR X,A CP NPPL < ??? JLE SUP4 BR AGOGE < FIN D'EXPLORATION... SUP2: EQU $ IF XXXEXT,,XWOR%, BSR ATESTV < LE POINT A 1 TROUVE DANS L'IMAGE < ARGUMENT N'AURAIT-IL PAS DEJA ETE < PRIS DANS UN CONTOUR ANTERIEUR ??? CPZ INDIC JE SUP6 < OUI, ON L'IGNORE... XWOR%: VAL 0 IF XXXEXT,XWOR%,,XWOR% LX POINTD+X < ON SE PLACE SUR LE DERNIER LY POINTD+Y < POINT NOIR RENCONTRE. BSR ATESTV < EST-CE SUR CONTOUR ANTERIEUR ??? CPZ INDIC JE SUP6 < OUI, ON L'IGNORE... XWOR%: VAL 0 PSR X,Y < SAVE LE POINT COURANT, STX DEP+X < QUI EST LE NOUVEAU STY DEP+Y < POINT DE DEPART... STZ VX IC VX < VX=+1, STZ VY < VY=0... BSR ASENDO < INSERTION POINT DE DEPART. BSR ASETV < MARQUAGE DU POINT DE DEPART. LBI 0 < INITIALISATION DU COMPTAGE... ADRI 1,X BSR AVOISI < M(X+1,Y). ADRI -2,X BSR AVOISI < M(X-1,Y). ADRI 1,Y ADRI 1,X BSR AVOISI < M(X,Y+1). ADRI -2,Y BSR AVOISI < M(X,Y-1). ADRI 1,Y LR B,A CPI 4 < 4 VOISINS A 1 OU INEXISTANTS ??? JE CONT7 < OUI, POINT NOIR ISOLE... < < R E C H E R C H E D U C O N T O U R I N T E R I E U R : < CONT1: EQU $ STX PTC+X < SAVE LE POINT COURANT. STY PTC+Y < SAVE LE POINT COURANT. BSR AROT1 < ROTATION A DROITE PRELIMINAIRE. CONT3: EQU $ BSR AMOV < DEPLACEMENT DU POINT (X,Y). STZ ITEST < AFIN DE TESTER LES POINTS A 0. BSR AEXIST < TEST DU POINT (X,Y). JAE CONT2 < OK, (X,Y)=0 ET EXISTE (ITEST=0). CONT5: EQU $ LX PTC+X < RETOUR ARRIERE SUR PTC. LY PTC+Y < RETOUR ARRIERE SUR PTC. BSR AROT3 < ROTATION DU VECTEUR (VX,VY). JMP CONT3 < ET ON RECOMMENCE... < < CAS OU L'ON A TROUVE UN POINT A 0 QUI EXISTE : < CONT2: EQU $ LBI 0 < B=COMPTEUR DES VOISINS DU POINT < TROUVE (X,Y). IC ITEST < AFIN DE TESTER LES POINTS A 1. CONT4: EQU $ LA VX STA SVX < SAVE VX AVANT LE DECOMPTE. LA VY STA SVY < SAVE VY AVANT LE DECOMPTE. LA ANGLE STA SANGLE < SAVE ANGLE AVANT LE DECOMPTE. PSR X,Y < SAVE LE POINT COURANT (X,Y). BSR AROT1 < ON SE PLACE A DROITE DU < MOUVEMENT (VX,VY). BSR AMOV IF XXXEXT,,XWOR%, STZ IEXT < TRACE DANS 'MOVI'... XWOR%: VAL 0 BSR AVOISI < ET ON TESTE LES 3 POINTS < IMMEDIATEMENT A DROITE DU < POINT COURANT SUIVANT LE < MOUVEMENT (VX,VY). IF XXXEXT,,XWOR%, JAE TROUVE < ON A TROUVE UN POINT... XWOR%: VAL 0 BSR AROT1 BSR AMOV BSR AVOISI IF XXXEXT,,XWOR%, JAE TROUVE < ON A TROUVE UN POINT... XWOR%: VAL 0 BSR AROT1 BSR AROT1 BSR AMOV BSR AMOV BSR AVOISI IF XXXEXT,,XWOR%, TROUVE: EQU $ IC IEXT < IEXT#0. XWOR%: VAL 0 PLR X,Y < RESTAURE LE POINT COURANT. PSR A < SAVE LES CONDITIONS DE 'VOISI'. LA SANGLE STA ANGLE < RESTAURE ANGLE. LA SVX STA VX < RESTAURE VX. LA SVY STA VY < RESTAURE VY. PLR A < A=CONDITIONS DE 'VOISI'. CPZR B < LE POINT (X,Y) A-T'IL AU < MOINS 1 VOISIN ??? JE CONT5 < NON, ON FAIT DONC UN RETOUR ARRIERE < SUR PTC, ET ROTATION DE (VX,VY). IF XXXEXT,,XWOR%, JANE CONT1 < 'VOISI' N'A RIEN FAIT... LA POINT1+X < LE POINT TRACE EST-IL CP DEP+X < LE POINT DE DEPART ??? JNE CONT1 < NON... LA POINT1+Y < MEME QUESTION... CP DEP+Y JNE CONT1 < NON... XWOR%: VAL 0 IF XXXEXT,XWOR%,,XWOR% BSR ASETM BSR ASETV < MARQUAGE VIRTUEL DU POINT COURANT. LR X,A CP DEP+X JNE CONT1 < CONTOUR PAS ENCORE FERME... LR Y,A CP DEP+Y JNE CONT1 < CONTOUR PAS ENCORE FERME... XWOR%: VAL 0 CPZ IOAB < OAB INTERMEDIAIRES ??? JNE CONT7 < NON... STZ SEGEXT+X < OUI... STZ SEGEXT+Y LXI 0 LY NLIG BSR ASEND < OAB DE FIN DE CONTOUR COURANT... < < ON A LE CONTOUR INTERIEUR : < CONT7: EQU $ CPZ ICONTO < CONTOUR OU REMPLISSAGE ??? JNE CONT91 < REMPLISSAGE... BSR ACONTI < ACCES AU CONTOUR GENERE... LAI TVPB BSR AVTV < DIFFUSION DU CONTOUR GENERE --> BLEU. PLR X,Y < RESTAURE LE POINT COURANT... BR ASUP1 < CONTOUR... CONT91: EQU $ < < I S O L A T I O N D E R N I E R C O N T O U R : < BSR AVIRE < MISE DES CONTOURS EN SCRATCH. LAI TVPB?TVIN BSR AVTV < BLEU --> RESIDENT. LRM A EOR &AIMAG0 < POUR EXTRACTION DU DERNIER CONTOUR... BSR AOSR < RESIDENT <-- RESIDENT.EOR.SCRACTH. LRM A,B,X WORD IMAG WORD IMAG+LIMAG WORD LIMAG MOVE < SAUVEGARDE DU CONTOUR COURANT. BSR ACONTI < (CONTOUR(0),... CONTOUR(N)) --> RESIDENT. LAI TVPB BSR AVTV < RESIDENT --> BLEU. LAI TVPV?TVIN < SQUELETTE --> RESIDENT. BSR AVTV BSR ACONTO < SQUELETTES --> SCRATCH. LRM A,B,X WORD IMAG+LIMAG WORD IMAG WORD LIMAG MOVE < RESTAURATION DU CONTOUR COURANT. LAD DELI SVC 0 < DELETE IMAGE DE TRAVAIL... < < L I M I T E S V E R T I C A L E S C O N T O U R : < LA AIMAG STA AIMAG0 < RELAI D'ACCES AUX LIGNES. LYI 0 < Y=NUMERO DE LIGNE COURANTE. LOOK1: EQU $ LXI CNMPL < INDEX MOT SUR LA LIGNE. LOOK2: EQU $ CPZ &AIMAG0 < NOIR OU PAS ??? JNE LOOK3 < PAS NOIR, ON ARRETE... JDX LOOK2 < TANT QUE C'EST NOIR, < ON CONTINUE. ADRI 1,Y < LIGNE SUIVANTE. LA AIMAG0 ADRI CNMPL,A < PROGRESSION @LIGNE COURANTE. STA AIMAG0 JMP LOOK1 < TEST LIGNE SUIVANTE. LOOK3: EQU $ STY YMIN < Y DONNE LA DERNIERE LIGNE < LORS DES BALAYGES DE BAS < EN HAUT DE L'IMAGE. LAI CNMPL MP NLIG LR B,A AD AIMAG STA AIMAG0 < RELAI D'ACCES A LA DERNIERE < LIGNE DE L'IMAGE. LY NLIG < Y=NUMERO DE LIGNE COURANTE. LOOK4: EQU $ LXI CNMPL < INDEX MOT SUR LA LIGNE. LOOK5: EQU $ CPZ &AIMAG0 < NOIR OU PAS ??? JNE LOOK6 < ON ARRETE AU 1ER NON NOIR. JDX LOOK5 < TANT QUE C'EST NOIR, < ON CONTINUE... ADRI -1,Y < PASSAGE LIGNE PRECEDENTE. LA AIMAG0 ADRI -CNMPL,A < PROGRESION @LIGNE COURANTE. STA AIMAG0 JMP LOOK4 LOOK6: EQU $ STY YMAX < Y DONNE LA 1ERE LIGNE A TESTER < LORS DES BALAYAGES DE BAS < EN HAUT DE L'IMAGE. JMP CONT1X < LA PREMIERE FOIS... < < R E M P L I S S A G E D U C O N T O U R : < CONT18: EQU $ BSR ACONTI < RECUPERATION DU SQUELETTE... CONT1X: EQU $ BSR ARAZDK < < SUPPRESSION EVENTUELLE DES POINTS 0-ISOLES OU 1-ISOLES : < STZ ITEST IC ITEST ISOL8: EQU $ STZ DOUBLE < A CHAQUE REEXPLORATION, ON < REINITIALISE 'DOUBLE'. STZ PREM IC PREM < AVANT CHAQUE TOUR, ON < INDIQUE QUE LE 1ER POINT N'A < PAS ETE RENCONTRE. STZ NISOL < INITIALISATION DU NBRE DE < POINTS AINSI ELIMINES. LY YMAX < Y=1ERE LIGNE A TESTER. ISOL1: EQU $ LX NPPL < INITIALISATION COORDONNE X. ISOL2: EQU $ PSR C < SAVE @IMAGE VIDEO. LR Y,A MP NMPL < B=@ 1ER MOT DE LA LIGNE (Y). ADR B,C LR X,A SLRS 4 ADR A,C < C=@MT COURANT. LA 0,C < A=MOT COURANT. PLR C < RESTAURE @IMAGE. CPI 'FFFF JE ISOL20 < CAS D'UN MOT TOUT BLANC. JANE ISOL9 < MOT PARTIELLEMENT BLANC. ISOL20: EQU $ LR X,A < DANS LE CAS D'UN MOT TOUT ANDI 'FFF0 < BLANC OU TOUT NOIR, ON LR A,X < PASSE AU PRECEDENT... JMP ISOL7 < VERS LE CHANGEMENT DE MOT. ISOL9: EQU $ BSR AEXIST < (X,Y) EST-IL A 1 ??? JANE ISOL7 < NON, DONC ININTERESSANT... LBI 0 < B=NBRE DE VOISINS DU POINT < COURANT (X,Y). ADRI 1,X < POINT (X+1,Y). BSR AVOISI ADRI -1-1,X < POINT (X-1,Y). BSR AVOISI ADRI 1,X ADRI -1,Y < POINT (X,Y-1). BSR AVOISI ADRI 1+1,Y < POINT (X,Y+1). BSR AVOISI ADRI -1,Y < RETOUR AU POINT (X,Y). LR B,A < A=NBRE DE VOISINS DE (X,Y). JANE ISOL10 < OK POINT 1-ISOLE AU MOINS... WORD '1E16 < E R R E U R P R O G !!! ISOL10: EQU $ CPI 4 JNE ISOL11 < < CAS D'UN POINT A 4 VOISINS 'ORTHOGONAUX' : < IC DOUBLE < ON LE COMPTE IC DOUBLE < 2 FOIS... JMP ISOL7 < ET C'EST TOUT. < < CAS DES AUTRES POINTS : < ISOL11: EQU $ CPI 1 < (X,Y) EST-IL 0-ISOLE OU < 1-ISOLE ??? JLE ISOL12 < OUI, ON L'ELIMINE. CPZ PREM < NON, ALORS A-T'ON DEJA < RENCONTRE LE 1ER POINT < DE L'IMAGE ??? JE ISOL7 < OUI, DONC PASSONS AU NEXT. STZ PREM < NON, ON EST DONC ICI < EN PRESENCE DU 1ER POINT, STX DEP+X < QUI RISQUE DE DEVENIR LE STY DEP+Y < FUTUR POINT DE DEPART... JMP ISOL7 < VERS LE POINT SUIVANT... ISOL12: EQU $ BSR ARESET < OUI, ON L'ELIMINE. IC NISOL < ET ON COMPTE LES POINTS < AINSI EFFACES. LR X,A CP DEP+X < EST-ON AU POINT DE DEPART ??? JNE ISOL7 < NON. LR Y,A CP DEP+Y < EST-ON AU POINT DE DEPART ??? JNE ISOL7 < NON. LA POINT1+X < OUI : ON A DONC EFFACE LE STA DEP+X < POINT DE DEPART ELU AU TOUR LA POINT1+Y < PRECEDENT : ON LE REMPLACE STA DEP+Y < PAR UN POINT QUI EST A 1. ISOL7: EQU $ ADRI -1,X < CHANGEMENT DE POINT COURANT. CPZR X < EXISTE-T'IL ??? JGE ISOL2 < OUI. ADRI -1,Y < NON, CHANGEMENT DE LIGNE. LR Y,A < VALIDATION Y. CP YMIN < LIGNE INTERESSANTE ??? JGE ISOL1 < OUI. CPZ NISOL < NON, ON A FINI, ALORS < A-T'ON EFFACE AU MOINS < UN POINT ??? JG ISOL8 < OUI, ALORS ON RECOMMENCE, < CAR CES EFFACEMENTS ONT PU < ENGENDRES DE NOUVEAUX < POINTS 0-ISOLES OU 1-ISOLES. < < RECALAGE DU POINT DE DEPART POUR CHAQUE TOUR : < LAI 1 STA VX < VX=1, STZ VY < VY=0. LX DEP+X < POSITIONNEMENT AU POINT DE LY DEP+Y < DEPART CHOISI. < DE DEPART CHOISI. BSR ASENDO < INSERTION POINT DE DEPART. < < NOTA : < LE POINT DE DEPART CHOISI (DEP), < EST CHOISI A UN ANGLE VERS LA < GAUCHE DU CONTOUR POUR EVITER < DES CISAILLEMENTS EVENTELS DE < CELUI-CI. < < < INITIALISATION DU NOUVEAU PARCOURS : < STZ KOMPT < RAZ DU COMPTEUR DE REM- < PLACANTS OBTENUS LORS DU < PARCOURS AUE L'ON VA FAIRE. STZ SDEP DC SDEP < SDEP<0 : A PRIORI, ON NE < CHANGERA PAS DE POINT DE < DEPART. < < U N T O U R D E R E M P L I S S A G E : < CONT10: EQU $ < < RECHERCHE PRELIMINAIRE DU FUTUR SUCCESSEUR DU POINT COURANT : < STX PTC+X < SAUVEGARDE DU POINT STY PTC+Y < COURANT 'PTC'. LAD PILR STA APILR < INITIALISATION DU POINTEUR < DE LA PILE DES REMPLACANTS. < < TEST A DROITE DU MOUVEMENT : < BSR AROT1 < ROTATION A DROITE. BSR AMOV < DEPLACEMENT VERS LA DROITE. STZ ITEST IC ITEST < POUR LE TEST DES POINTS A 1. BSR AEXIST < EXISTENCE DU POINT A < DROITE DE PTC ??? JAE CONT21 < OK, SUCCESSEUR TROUVE A DROITE. < < TEST DEVANT LE MOUVEMENT : < BSR ASUCC < IL SUFFIT DE TOURNER DE LA < DROITE VERS LA GAUCHE. JAE CONT22 < OK, SUCCESSEUR TROUVE DEVANT. < < TEST A GAUCHE DU MOUVEMENT : < BSR ASUCC < ON TOURNE ENCORE DE LA < DROITE VERS LA GAUCHE. JAE CONT23 < OK, SUCCESSEUR TROUVE A GAUCHE. < < TEST EN ARRIERE DU MOUVEMENT : < BSR ASUCC < DROITE VERS GAUCHE... JAE CONT24 < OK, SUCCESSEUR TROUVE EN ARRIERE. < < CAS OU L'ON RECONTRE UN POINT ISOLE : < LAD M3 BSR APRINT < ON LE SIGNALE, BR AGOGE < ET ON RETOURNE A 'GE'. < < CAS OU L'ON SE DEPLACERA A DROITE : < CONT21: EQU $ LAI 4 < AFIN D'ETRE SUR DE REINSERER < PTC DANS LE CAS D'UN VIRAGE < A DROITE... BSR ASAVDP < SAUVEGARDE DU SUCCES- < SEUR DE PTC, ET B=0. BSR AREMPL < REMPLACANT M1 (A GAUCHE < DU SUCCESSEUR 'SUC'). BSR AREMPL < REMPLACANT M2 (EN ARRIERE < DE M1). JMP CONT25 < VERS LE REMPLACANT M3 (A < DROITE DE M2). < < CAS OU L'ON SE DEPLACERA EN AVANT : < CONT22: EQU $ LAI 1 < ON ATTEND 1 REMPLACANT. BSR ASAVDP < SAUVEGARDE DU SUCCESSEUR < DE PTC, ET B=0. CONT25: EQU $ < REMPLACANT M3 (A GAUCHE < DU POINT COURANT 'PTC'). BSR AREMPL < REMPLACANT M3. JMP CONT26 < < CAS OU L'ON SE DEPLACERA A GAUCHE OU EN ARRIERE : < CONT23: EQU $ CONT24: EQU $ LAI 1 < ON FAIT COMME SI L'ON ATTEN- < DAIT 1 POINT, AFIN DE REINSERER < LE POINT COURANT. BSR ASAVDP < SAUVEGARDE DU SUCCESSEUR DE < PTC, ET B=0. < < NOTA : < DANS LE CAS DES DEPLACEMENTS A < GAUCHE, ET EN ARRIERE, ON NE CHERCHE < PAS DE REMPLACANTS, ILS NE SONT < PAS NECESSAIRES, ET ILS RISQUE- < RAIENT DE PERTURBER LA FORME DU CONTOUR !!! < CONT26: EQU $ LR B,A < A=NBRE DE REMPLACANTS AINSI < TROUVES POUR PTC. CP NREMPL < A-T'ON OBTENU CE QU'ON < ATTENDAIT POUR LUI ??? JE CONT27 < OUI, C'EST BOB. LX PTC+X < NON, ALORS, LY PTC+Y < ... BSR ASPILR < PTC EST INSERE DANS PILR. ADRI 1,B < ET ON COMPTE PTC COMME < UN REMPLACANT. < < DEPLACEMENT EFFECTIF SUR LE CONTOUR : < CONT27: EQU $ STB NPILR < NPILR=NBRE DE POINTS EMPILES < DANS PILR ET A MARQUER SUR < LE CONTOUR QUE L'ON GENERE. CONT50: EQU $ DC NPILR < DECPOMPTAGE. JL CONT51 < C'EST FINI... DC APILR < REGRESSION DU POINTEUR DE PILR. LY &APILR DC APILR < REGRESSION DU POINTEUR DE PILR. LX &APILR CONT52: EQU $ BSR ASETV < MARQUAGE VIRTUEL DE (X,Y). LA PTC+X CP DEP+X < EST-ON AU POINT DE DEPART ??? JNE CONT50 LA PTC+Y CP DEP+Y < EST-ON AU POINT DE DEPART ??? JNE CONT50 < NON.... STX SDEP+X < SAUVEGARDE DU FUTUR STY SDEP+Y < POINT DE DEPART. JMP CONT50 < AU POINT SUIVANT. CONT51: EQU $ < < RESTAURATION DU VECTEUR DEPLACEMENT MENANT AU SUCCESSEUR : < LA SVX STA VX LA SVY STA VY < < PASSAGE AU SUCCESSEUR : < LX SUC+X LY SUC+Y < < A-T'ON BOUCLE UN TOUR ???? < LR X,A CP DEP+X JNE CONT10 < NON, TRAITEMENT DU SUCCESSEUR... LR Y,A CP DEP+Y JNE CONT10 < NON, TRAITEMENT DU SUCCESSEUR... < < CAS D'UN RETOUR AU POINT DE DEPART : < CONT30: EQU $ < < G E N E R A T I O N D U N O U V E A U < C O N T O U R I N T E R I E U R : < LAD LOADI SVC 0 < RAPPEL DE L'IMAGE DE TRAVAIL < COURANTE; A T T E N T I O N : < LA 1ERE FOIS PUISQU'ELLE < N'EXISTE PAS, ON PREND DONC < A SA PLACE LE CONTOUR < INTERIEUR INITIAL.. STZ KDIFF < PAS DE DIFFERENCE A PRIORI. STZ RDK+3 < ON PART SUR LE SECTEUR 0. LA AIMAG STA AIMAG0 < GENERATION D'UN RELAI D'ACCES < AUX PARTIES DE L'IMAGE PAR JDX. LXI LIMAG/128 < X=NBRE DE SECTEURS. EOR1: EQU $ PSR X < SAVE LE DECOMPTE DES SECTEURS. LB RDK+3 < B=SECTEUR COURANT. BSR ARESID < QUE L'ON REND RESIDENT. LA ASECTC < A=RELAI/1 DU SECTEUR (B). ADRI -1,A STA ASECTC < A=RELAI/1 DU SECTEUR (B). LXI 128 < X=NBRE DE MOTS A TRAITER. EOR2: EQU $ LA &ASECTC < A=MOT COURANT DU SECTEUR. AND TRAME < TRAMAGE EVENTUEL DE L'IMAGE < FINALE. LB &AIMAG0 < ACCES IMAGE COURANTE DANS B. ORR B,A < ON RAJOUTE A L'IMAGE COURANTE, < LE NOUVEAU CONTOUR INTERIEUR. STA &AIMAG0 < MAJ DE L'IMAGE MEMOIRE. CPR A,B < Y-A-T'IL UNE DIFFERENCE ??? JE EOR3 < NON... IC KDIFF < OUI, ON LA COMPTE. EOR3: EQU $ JDX EOR2 < AU MOT PRECEDENT... LAI 128 AD AIMAG0 < PROGRESSION RELAI STA AIMAG0 < D'ACCES A L'IMAGE. IC RDK+3 < PROGRESION NUMERO SECTEUR. PLR X < RESTAURE LE DECOMPTE. JDX EOR1 < AU SECTEUR SUIVANT. LAD DELI SVC 0 < RAZ DE L'IMAGE DE TRAVAIL. LAD STORI SVC 0 < ET NOUVELLE GENERATION. LB SDEP+Y < EVENTUEL FUTUR Y(DEP), LA SDEP+X < EVENTUEL FUTUR X(DEP). CPZ SDEP < SDEP EST-IL VALIDE ??? JGE CONT40 < OUI, CHANGEMENT DEP PAR SDEP. WORD '1E16 < E R R E U R P R O G !!! CONT40: EQU $ STA DEP+X STB DEP+Y LA KOMPT < AU COURS DE CE TOUR, UN < REMPLACANT AU MOINS A-T'IL < ETE TROUVE ??? JAG LOOP < OUI, IL FAUT FAIRE UN < NOUVEAU PARCOURS. NLOOP: EQU $ LRM A,B,X WORD LIMAG-1 < A=EMETTEUR CDA, WORD WORK < B=RECEPTEUR RESIDENT, WORD LIMAG < X=NOMBRE DE MOTS DE L'IMAGE. CDA1: EQU $ PSR A,X LXI 1 RCDA PLR X LA &AIMAG < ACCES AU REMPLISSAGE COURANT, OR WORK < CUMUL DU REMPLISSAGE COURANT... STA &AIMAG PLR A ADRI -1,A < CHANGEMENT DE L'EMETTEUR. JDX CDA1 BSR AWCDA < CDA <-- RESIDENT (REMPLISSAGES). LAI TVPV?TVIN BSR AVTV < SQUELETTE --> RESIDENT, LRM A OR &AIMAG0 BSR AOSR < CUMUL DES SQUELETTES... LAI TVPV BSR AVTV < SQUELETTE --> VERT. LAI TVPB?TVIN BSR AVTV < BLEU --> RESIDENT, BSR ACONTO < CONTOURS 0 A N --> SCRATCH. CPZ IOAB < OAB INTERMEDIAIRES ??? JNE FINSQ < NON... STZ SEGEXT+X < OUI... STZ SEGEXT+Y LXI 0 LY NLIG BSR ASEND < OAB DE FIN DE CONTOUR COURANT... FINSQ: EQU $ PLR X,Y < RESTAURATION DU POINT COURANT... BR ASUP1 < AU SUIVANT... LOOP: EQU $ CPZ KDIFF < Y-A-T'IL EU DES DIFFERENCES ??? JE NLOOP < NON, ON ABANDONNE !!! CP PKOMPT < A-T'ON REMPLACE AUTANT < DE POINTS QU'AU TOUR < PRECEDENT ??? STA PKOMPT < MAJ A PRIORI... JNE LOOP1 < NON, ON VA FAIRE UN < NOUVEAU TOUR... < < CAS OU LE SYSTEME PARAIT OSCILLER : < IC OSCIL < COMPTAGE DE L'OSCILLATION. LA OSCIL CP MOSCIL < ABORT OU PAS ??? JGE NLOOP < OUI, RETOUR A GE. BR ALOOP < NON, ON ATTEND ENCORE... < < CAS DU FONCTIONNEMENT NORMAL : < LOOP1: EQU $ STZ OSCIL < REINITIALISATION DE OSCIL. BR ALOOP < VERS UN TOUR DE PLUS. 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#