NMPROC: VAL "KC" < NOM DU PROCESSEUR. IDP "KC - RELEASE 09/02/1981" 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: DZS SSTACK EOT #SIP IMAGE 256# NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO. IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO. < < VALIDATION DU FORMAT DE L'IMAGE (CARREE) : < X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE. X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE. IF X20-X21,,X100, IF ATTENTION : L'IMAGE N'EST PAS CARREE !!! X100: VAL 0 < < DEFINITION DES COULEURS : < NCOOL: VAL 3 NIVMAX:: VAL 1>NCOOL-1 < NIVEAU DE COULEUR MAX. PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < MESSAGES : < M1: BYTE 15;'6D ASCI "ERREUR DEPART!" M2: BYTE 11;'6D ASCI "NON FERME!" M3: BYTE 13;'6D ASCI "POINT ISOLE!" M4: BYTE 10;'6D ASCI "INTERIEUR " M5: BYTE 10;'6D ASCI "EXTERIEUR " M6: BYTE 3;'6D ASCI "X=" M7: BYTE 3;'6D ASCI "Y=" M8: BYTE 6;'6D ASCI "COUL= " M9: BYTE 11;'6D ASCI "DETOURAGE?" M10: BYTE 5;'6D ASCI "RDN=" M11: BYTE 1;"/" 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 12 K MOTS. RELMEM: WORD '0004 < DEMANDE D'ALLOCATION 4K MOTS. WORD '6000 WORD '2000 DEMOUT: WORD '0202 < ECRITURE DES MESSAGES. WORD 0 WORD 0 DEMIN: WORD '0101 < ENTREE SUR '01. WORD REP-ZERO*2 WORD 4 DEMREP: WORD '0101 < LECTURE 1 CARACTERE REPONSE. WORD REP-ZERO*2 WORD 1 OG: WORD '0103 < OPEN GRAPHIQUE DE '01. CU: WORD '0106 < MISE EN FONCTION DU CURSEUR WORD 0 < GRAPHIQUE DE '01 (AMDEM=0). LCU: WORD '0109 < LECTURE CURSEUR GRAPHIQUE WORD CURSOR-ZERO*2 < DE '01. WORD 6 CG: WORD '0104 < CLOSE GRAPHIQUE DE '01. STABIL: WORD '8A01 < DEMANDE DE STABILISATION VIDEO. WORD IMAG-ZERO*2 WORD LIMAG*2 WORD TVPV?TVIN < SUR LE PROCESSEUR VERT. IMAGO2: WORD IMAG-ZERO+LIMAG*2 < < CONSTANTES : < 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. COLOR: WORD 0 < COULEUR CHOISIE (DE 1 A 7). 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. KAROT: WORD 0 < COMPTEUR DES RETOURS A 'PTC'. MULTI: WORD 0 < DETECTEUR DE MARQUAGE BOUCLE DU < TYPE A --> B --> A --> B... SDEP: WORD 0;0 < POINT DE DEPART POUR LE TOUR < SUIVANT (FUTUR 'DEP'). 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. NISOL: WORD 0 < NOMBRE DE POINTS ISOLES, < OU SIMPLEMENT RATTACHES < RECONTRES AVANT CHAQUE < PARCOURS. 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. KVOISH: WORD 0 < COMPTAGE DES VOISINS DE DESSUS. KVOISB: WORD 0 < COMPTAGE DES VOISINS DE DESSOUS. LASTY: WORD -1 < Y DU DERNIER POINT TRACE PAR 'SETV', < N'EXISTE PAS INITIALEMENT... C3: WORD 3 < POUR MULTIPLIER C4: WORD 4 < PAR 4/3... < < RELAIS DIVERS : < ANOM1: WORD NOM+0 < POUR METTRE LE NOM I1/I2, ANOM2: WORD NOM+1 < POUR METTRE L'IDESC/EOT. ASECTK: WORD 0 < RELAI (JDX) VERS LES BUFFERS SECTEURS... AIMAG1: WORD IMAG,X < ACCES A L'IMAGE VIDEO COURANTE. AIMAG2: WORD IMAG+LIMAG,X < ACCES A LA MEMOIRE DES (Y+LASTY)/2. AIMAG0: WORD 0 < POUR METTRE LES SECTEURS < SCRATCH DANS L'IMAGE COURANTE. 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. ARESET: WORD RESET < MISE D'UN POINT A 0. AINVER: WORD INVER < INVERSION D'UN POINT. ACLIGN: WORD CLIGN < CLIGNOTEMENT DES POINTS VIDEO. ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT. ASETV: WORD SETV < MISE D'UN POINT VIRTUEL A 1. ASETW: WORD SETW < MARQUAGE DES POINTS (X,(Y+LASTY)/2). ARSETV: WORD RSETV < MISE D'UN POINT VIRTUEL A 0. AINVEV: WORD INVEV < INVERSION D'UN POINT VIRTUEL. ATESTV: WORD TESTV < TEST D'UN POINT VIRTUEL. AXISTV: WORD XISTV < EXISTENCE VIRTUELLE... APS: WORD PS < SBT. APR: WORD PR < RBT. API: WORD PI < IBT. APT: WORD PT < TBT. AOP: WORD 0 < PS/PR/PI/PT SUIVANT LES BESOINS. AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. AEXIST: WORD EXIST < EXISTENCE D'UN POINT. AVOISV: WORD VOISV < TEST DES POINTS (X,(Y+LASTY)/2). AVOISI: WORD VOISI < TEST ET COMPTAGE D'UN VOISIN. AVOISY: WORD VOISY < IDEM... AMASK: WORD MASK < TEST DES CONFIGURATIONS DANGEREUSES. APILE: WORD PILE-1 < PILE DE SMC. ASTACK: WORD STACK-1 < PILE DE KO. AI2: WORD ITEM2-1,X < RELAI DE RAZ ITEM1+ITEM2. ASPOR1: WORD SPOR1 < CUMUL DES 3 COULEURS EN RESIDENT. ASPOR2: WORD SPOR2 < REMPLISSAGE... AGOGE: WORD GOGE < RETOUR A GE. APRINT: WORD PRINT < EDITION DES MESSAGES. AHEX: WORD HEX < CONVERSION ASCI --> BINAIRE. ACOORD: WORD COORD < ENTREE COORDONNE X/Y. AMOV: WORD MOV < DEPLACEMENT PAR (VX,VY). AROT1: WORD ROT1 < ROTATION DE +PI/2. AROT3: WORD ROT3 < ROTATION DE -PI/2. ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH < EN MEMOIRE. ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK. ALOOP: WORD CONT1 < VERS LE CHANGEMENT DE 'PTC'. ASP1: WORD SP1 < COMPTAGE DES VOISINS DESSUS/DESSOUS. ASP2: WORD SP2 < DISCRIMINATION TANGENCE/INFLEXION. ADEP4: WORD DEP4 < ERREUR DE POINT DE DEPART... < < DONNEES POUR LE GENERATEUR ALEATOIRE : < MRDN: WORD 0 < MULTIPLICATEUR DU NOMBRE ALEATOIRE, XRDN: WORD 0 < ET DECOMPTEUR DE 'MRDN'... SECRDN: WORD 0 < POUR ATTEINDRE LES SECONDES... RDN7: WORD 793 < DECOMPTEUR D'ACCES A LA SECONDE, RDN8: WORD 1 < VALEUR COURANTE DE 'RDN7'. RDN9: WORD 0 < SECONDE COURANTE... DRDN: WORD 0 < DIVISEUR DU NOMBRE ALEATOIRE... F1: FLOAT 1 RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDN1: WORD 5189 < CONSTANTE RDN2: WORD 6791 < DE CALCUL DES RDN3:: VAL 19 < NOMBRE ALEATOIRES... RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RDN5: WORD 4021 RDN6:: VAL 23 POINTS: WORD 16807 KRDN1: WORD 0 XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'. KRDN2: WORD 0 XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'. ARDN: WORD SPRDN < GENERATEUR DE NOMBRES ALEATOIRES. < < 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. 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 WDKP3: WORD 0 < NUMERO DE SECTEUR, RDKP3: WORD 0 < IDEM... ABUF1: WORD PILE-XSECR/128*128*2 < @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 $ DO NSEC WORD -1 < INITIALEMENT NON RESIDENT. < < LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) : < TOPO: EQU $ DO NSECR WORD -1 < INOCCUPE INITIALEMENT. < < COMPTEUR D'USAGE DES BUFFERS : < USE: EQU $ DO NSECR WORD 0 < INUTILISE INITIALEMENT. PAGE PROG < < < E D I T I O N D ' U N M E S S A G E : < < < ARGUMENT : < A=@MESSAGE. < < PRINT: EQU $ PSR C,X LR A,C < C=@MESSAGE. ADR A,A ADRI 1,A < A=@OCTET DU MESSAGE. STA DEMOUT+1 LBY 0,C < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 LAD DEMOUT SVC 0 < EDITION DU MESSAGE. PLR C,X RSR PAGE < < < G E N E R A T E U R A L E A T O I R E : < < < ARGUMENT : < (X,Y)=COORDONNEES X ET Y DU POINT COURANT... < < SPRDN: EQU $ PSR B LA RDN < GENERATION DE NOMBRES ALEATOIRES : EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE... EOR KVOISH MP RDN1 SCRD RDN3 JANE SPMOYC LR B,A JANE SPMOYC LA KRDN1 ADRI XKRDN1,A SCRS XKRDN2 STA KRDN1 < PROGRESSION DE 'KRDN1'... SPMOYC: EQU $ EORR X,A EOR XRDN STA RDN DC RDN8 LA RDN9 < A=RDN9 A PRIORI... JNE SPRDN1 < ET BIEN OUI... CE N'EST PAS L'HEURE... LA RDN7 < C'EST L'HEURE D'ALLER CHERCHER STA RDN8 < LA SECONDE COURANTE ??!?!??! LA SECRDN ACTD 1 < B=SECONDE COURANTE, LR B,A STA RDN9 < ET MEMORISATION... SPRDN1: EQU $ EOR RDN STA RDN LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE... MP RDN5 EOR POINTS EOR KVOISB SCRD RDN6 JANE SPMOYF LR B,A JANE SPMOYF LA KRDN2 ADRI -XKRDN2,A SCRS XKRDN1 STA KRDN2 < PROGRESSION DE 'KRDN2'... SPMOYF: EQU $ EORR Y,A STA RDN4 EOR LASTY EOR RDN PLR B 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 < < < 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 $ 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 : < 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 < < < C U M U L D U R E M P L I S S A G E : < < < ARGUMENT : < X=NUMERO DU PROCESSEUR (TVPR, TVPV, TVPB). < < SPOR2: EQU $ LA COLOR NGR X,X TBT NBITMO,X < LE PROCESSEUR COURANT PARTICIPE-T'IL < A LA COULEUR FINALE ??? JNC SPOR21 < NON... NGR X,X PSR X LR X,A ORI TVIN STA STABIL+3 LAD STABIL SVC 0 < ENTREE DE LA COULEUR DE BASE (X), LX ALIMAG SPOR22: EQU $ LA &AIMAG2 OR &AIMAG1 < ON CUMULE LE REMPLISSAGE, STA &AIMAG2 < SUR L'ECRAN DE TV... JDX SPOR22 PLR X STX STABIL+3 LAD STABIL SVC 0 < MISE A JOUR DE LA COULEUR (X)... SPOR21: EQU $ RSR PAGE < < < C U M U L D E S 3 C O M P O S A N T E S : < < SPOR1: EQU $ STA STABIL+3 < A=ARGUMENT=COULEUR DE BASE... LAD STABIL SVC 0 < ENTREE DE LA COULEUR ARGUMENT, LX ALIMAG SPOR11: EQU $ LA &AIMAG1 OR &AIMAG2 < CUMUL... STA &AIMAG1 < DANS L'IMAGE RESIDENTE... JDX SPOR11 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 RDKP3 < 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 RDKP3 < B=NUMERO DU SECTEUR COURANT. BSR ARESID < QUE L'ON REND RESIDENT. LX RDKP3 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 RDKP3 < PASSAGE AU SECTEUR SUIVANT. PLR X JDX ECH1 RSR < < < R A Z D E L A Z O N E S C R A T C H : < < RAZDK: EQU $ STZ WDKP3 < DEPART SUR LE SECTEUR 0. LXI LIMAG/128 < NBRE DE BUFFERS SCRATCH < NECESSAIRE POUR 1 IMAGE. RAZ2: EQU $ PSR X < SAVE LE DECOMPTEUR. LB WDKP3 < B=NUMERO DU SECTEUR COURANT. BSR ARESID < QUE L'ON REND RESIDENT. LX WDKP3 LA &ALSECT < A=ADRESSE DU BUFFER ASSOCIE, JAG RAZ3 < OK... QUIT 1 < !??!?!??! RAZ3: EQU $ ADRI -1,A < POUR UNE INDEXATION SBT 0 < PAR 'JDX'... STA ASECTK < MISE EN PLACE DU RELAI VERS LE < BUFFER COURANT... LXI 128 RAZ1: EQU $ STZ &ASECTK < QUE L'ON RAZE... JDX RAZ1 PLR X < RESTAURE LE DECOMPTEUR. IC WDKP3 < PASSGE AU SECTEUR SUIVANT. JDX RAZ2 < DECOMPTAGE.. RSR PAGE < < < M I S E D ' U N B I T A 1 : < < < ARGUMENTS : < X ET Y CONTIENNENT X ET Y DU POINT. < C=@IMAG (IMAGE VIDEO). < < SET: EQU $ PSR B,X,C LR Y,A MP NMPL < CONVERSION DE L'Y DU POINT EN < UN NUMERO DE MOT. ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < CALCUL DE X MODULO 16 ; < X=NUMERO DU BIT DANS LE MOT. LA 0,C < A=MOT CONTENANT LE POINT (X,Y). SBT 0,X < POSITIONNEMENT DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < M A R Q U A G E D E S L A S T Y : < < < ARGUMENTS : CF 'SET'. < < SETW: EQU $ PSR Y,C LA ALIMAG ADR A,C < PASSAGE SUR LA MEMOIRE DES 'LASTY'... LA LASTY JAL SETW1 < CAS DE LA PREMIERE FOIS... CPR A,Y JE SETW1 < ON NE MARQUE PAS SI Y=LSTY... JG SETW2 < Y>LASTY... LR A,Y < SI Y<LASTY, Y <-- (LASTY)... SETW2: EQU $ BSR AINVER < MARQUAGE DE (X,Y) SI Y#LASTY... < ON MARQUE PAR INVERSION, AFIN D'ELIMINER < LES RETOURS ARRIERE SUR SES PROPRES PAS.. SETW1: EQU $ PLR Y,C STY LASTY < CHANHGEMENT DE LASTY. RSR < < < E F F A C E M E N T D ' U N P O I N T : < < < ARGUMENTS : < X ET Y CONTIENNENT X ET Y DU POINT. < C=@IMAG (IMAGE VIDEO). < < RESET: EQU $ PSR B,X,C LR Y,A MP NMPL ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU BIT REPRESENTANT < LE POINT DANS LE MOT ((C)). LA 0,C < A=MOT CONTENANT LE POINT (X,Y). RBT 0,X < EFFACEMENT DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < I N V E R S I O N V I D E O U N P O I N T : < < < ARGUMENT : < X ET Y CONTIENNENT X ET Y DU POINT A INVERSER. < C=@IMAG (IMAGE VIDEO). < < INVER: EQU $ PSR B,X,C LR Y,A MP NMPL ADR B,C LR X,A SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU BIT REPRESENTANT < LE POINT DANS LE MOT ((C)). LA 0,C < A=MOT CONTENANT LE POINT (X,Y). IBT 0,X < INVERSION VIDEO DU POINT. STA 0,C < MISE A JOUR DE CE MOT. PLR B,X,C RSR < < < C L I G N O T E M E N T D ' U N P O I N T : < < CLIGN: EQU $ PSR A,B PSR X LAD STABIL SVC 0 < ENTREE DU VERT EN RESIDENT, PLR X LAI TVPV STA STABIL+3 LB TEMPO < B=NBRE DE CLIGNOTEMENTS. CLIGN1: EQU $ BSR AINVER < INVERSION DU POINT (X,Y). PSR X LAD STABIL SVC 0 < DIFFUSION SUR LE VERT... PLR X ADRI -1,B < DECOMPTAGE. CPZR B < EST-CE FINI ??? JG CLIGN1 < NON. PLR A,B RSR < < < T E S T D ' U N P O I N T : < < < FONCTION DE ITEST : < ITEST=0 : CARY=1 SI POINT=0 , < =1 : CARY=1 SI POINT=1. < < < ARGUMENTS : < X ET Y CONTIENNENT L'X ET L'Y DU POINT , < C=@IMAG. < < < RESULTAT : < CARY POISITIONNE PAR LE POINT (0/1) 9 < < TEST: EQU $ PSR B,X,C LR Y,A < A=COORDONNEE Y DU POINT. MP NMPL ADR B,C LR X,A < A=COORDONNEE X DU POINT. SLRS 4 ADR A,C < C#MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < X=NUMERO DU POINT DANS LE MOT (C) LA 0,C CPZ ITEST < TEST DE LA VALEUR LOGIQUE DU < POINT. JNE E1022 < CONVENTION NORMALE (1). IBT 0,X < CAS DES CONVENTIONS INVERSEES (1) E1022: EQU $ TBT 0,X < TEST DU POINT. PLR B,X,C RSR PAGE < < < C O M P T A G E D E S V O I S I N S < D E S S U S / D E S S O U S : < < SP1: EQU $ BSR AVOISV < VOISIN DE DESSUS M(X,Y-1). JANE SP11 < IL EST NOIR... IL NE COMPTE PAS ?!?! IC KVOISH < IL N'Y A QUE LES BLANCS QUI COMPTENT !!! SP11: EQU $ ADRI 1,Y BSR AVOISV < VOISIN DE DESSOUS M(X,Y+1). JANE SP12 < NOIR... IC KVOISB < BLANC... SP12: EQU $ ADRI -1,Y RSR < < < D I S C R I M I N A T I O N < T A N G E N C E / I N F L E X I O N : < < < RESULTAT : < A=0 TANGENCE HORIZONTALE, < =1 INFLEXION. < < SP2: EQU $ LA KVOISH CPI 1 JE SP21 < INFLEXION : A=KVOISH=1. LA KVOISB CPI 1 JE SP21 < INFLEXION : A=KVOISB=1. LA KVOISH CP KVOISB JNE SP22 < TANGENCE... TBT 15 JNC SP22 < TANGENCE... LAI 1 < KVOISH=KVOISB IMPAIRS : INFLEXION... JMP SP21 SP22: EQU $ LAI 0 < TANGENCE HORIZONTALE : AUTRES CAS (A=0). SP21: EQU $ 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. < A DONNE POUR 'VOISY' LE RANG+1 D'UN < BIT A METTRE A 1 DANS B... < < 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. VOISI1: EQU $ RSR < < ENTRY AVEC COMPTAGE UNIQUEMENT : < VOISY: EQU $ ADRI -1,A PSR A BSR AEXIST < TEST DU POINT (X,Y)... CPI 0 < A CAUSE DU PLR... PLR A JNE VOISI1 < N'EXISTE PAS OU EST A 0... XR A,X SBT 16,X < MEMORISATION DANS B... XR A,X JMP VOISI1 < < < 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 D E ( X , L A S T Y ) : < < VOISV: EQU $ PSR C LA ALIMAG ADR A,C BSR AEXIST < EXISTENCE SUR LA MEMOIRE DES LASTY... PLR C 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 < < < 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. < < < 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. LAD CG SVC 0 < ON NE SAIT JAMAIS... 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 : < < WORD IMAG < VALEUR BASE C. WORD LOC+'80 < VALEUR BASE L. WORD BRANCH < VALEUR BASE W. IMAGE: EQU $ LRP K ADRI -1,K PLR C,L,W < INITIALISATION C,L,W. LA ASTACK LR A,K < INITIALISATION K. IC KIN < COMPTAGE DES ENTRIES. JG GOGEX < ABORT SI ALT-MODE. LAD DEMMEM SVC 0 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. LAI NSPDAT SBT 0 ACTD 1 < B=ADRESSE DE LA DATE, ADRI 5,B STB SECRDN < ADRESSE DES SECONDES... < < R E C U P E R A T I O N P O I N T < D E D E P A R T : < CUR1: EQU $ LAD OG SVC 0 < OPEN GRAPHIQUE. LAD CU SVC 0 < MISE EN FONCTION CURSEUR. LAD LCU SVC 0 < LECTURE DU CURSEUR. < < NOTA : < ON NE TESTE PAS LES ERREURS < EN RETOUR (CAS DU PASSAGE EN < BATCH...), CAR 'CURSOR' EST INITIALISE < PAR 'N'. < LA CURSOR+1 < Y(CURSEUR). MP C4 < MISE AU DV C3 < FORMAT TELEVISION... SLRS DEDY < REDUCTION VIDEO. SB NLIG < LES AXES GRAPHIQUES ET < VIDEOS SONT INVERES. NGR A,Y < Y=Y(CURSEUR VIDEO). LA CURSOR+2 < X(CURSEUR). SLRS DEDX < REDUCTION VIDEO. LR A,X < X=X(CURSEUR VIDEO). BSR ACLIGN < CLIGNOTEMENT DU POINT (X,Y). LBY CURSOR < A=COMMANDE ASSOCIEE. < < COMMANDES RECONNUES : < C : CLIGNOTEMENT DU CURSEUR, < N : ENTREE EN HEXA DES COORDONNEES, < H : ENTREE PAR LE CURSEUR VERS LE HAUT, < B : ENTREE PAR LE CURSEUR VERS LE BAS. < CPI "C" JE CUR1 < CLIGNOTEMENT SEUL... LBI 1 < B=1 : VERS LE BAS A PRIORI... CPI "B" JE CUR3 < CURSEUR VERS LE BAS... LBI -1 < B=-1 : VERS LE HAUT A PRIORI... CPI "H" JE CUR3 < CURSEUR VERS LE HAUT... CPI "N" JNE CUR1 < RIEN COMPRIS, ON RECOMMENCE. < < ENTREE EN HEXA DES COORDONNEES : < LAD M6 < A=@MESSAGE 'X='. BSR ACOORD < ENTREE DE X. LR A,X < X=X(CURSEUR VIDEO). LAD M7 < A=@MESSAGE 'Y='. BSR ACOORD < ENTREE DE Y. LR A,Y < Y=Y(CURSEUR VIDEO). < < ON A UN POINT DE DEPART : < CUR3: EQU $ PSR B < SAVE LE SENS DE RECHERCHE DE 'DEP'. STX DEP+X STY DEP+Y < < I N I T I A L I S A T I O N I M A G E R E S I D E N T E < P A R C U M U L D E S T R O I S C O U L E U R S : < LA IMAGO2 STA STABIL+1 LAI TVPR?TVIN BSR ASPOR1 < CUMUL DU ROUGE SUR LE VERT QUON A < DEJA RENTRE PAR LE CLIGNOTTEMENT... LAI TVPB?TVIN BSR ASPOR1 < CUMUL DU BLEU... < < R A Z L A B O R D U R E D E L ' I M A G E : < LYI 0 LXI 0 < < BORDURE SUPERIEURE (Y=0) : < RAZE1: EQU $ BSR ATEST < TEST DU POINT M(X,0) ??? JNC RAZE1X < NOIR... ADRI 1,Y < BLANC : BSR ASET < ON MET A BLANC LE POINT M(X,1)... ADRI -1,Y BSR ARESET < ET ON MET A NOIR LE POINT M(X,0). RAZE1X: EQU $ ADRI 1,X LR X,A CP NPPL JLE RAZE1 ADRI -1,X < < BORDURE DROITE (X=NPPL) : < RAZE2: EQU $ BSR ATEST < TEST DU POINT M(NPPL,Y) ??? JNC RAZE2X < NOIR... ADRI -1,X < BLANC : BSR ASET < ON MET A BLANC LE POINT M(NPPL-1,Y)... ADRI 1,X BSR ARESET < ET ON MET A NOIR M(NPPL,Y). RAZE2X: EQU $ ADRI 1,Y LR Y,A CP NLIG JLE RAZE2 ADRI -1,Y < < BORDURE INFERIEURE (Y=NLIG) : < RAZE3: EQU $ BSR ATEST < TEST DU POINT M(X,NLIG) ??? JNC RAZE3X < NOIR... ADRI -1,Y < BLANC : BSR ASET < ON MET A BLANC LE POINT M(X,NLIG-1)... ADRI 1,Y BSR ARESET < ET ON MET A NOIR LE POINT M(X,NLIG). RAZE3X: EQU $ ADRI -1,X CPZR X JGE RAZE3 ADRI 1,X < < BORDURE GAUCHE (X=0) : < RAZE4: EQU $ BSR ATEST < TEST DU POINT M(0,Y) ??? JNC RAZE4X < NOIR... ADRI 1,X < BLANC : BSR ASET < ON MET A BLANC LE POINT M(1,Y)... ADRI -1,X BSR ARESET < ET ON MET A NOIR LE POINT M(0,Y). RAZE4X: EQU $ ADRI -1,Y CPZR Y JGE RAZE4 ADRI 1,Y < < INITIALISATION DU DISQUE : < BSR ARAZDK < < RAZ DE LA MEMOIRE DES LASTY : < LYI 0 < INDEX DE LA MEMOIRE, LX ALIMAG < NOMBRE DE MOTS A RAZER... RAZ4: EQU $ XR X,Y STZ &AIMAG2 < RAZ... ADRI 1,X XR X,Y JDX RAZ4 < < RECHERCHE D'UN POINT DE DEPART : < PLR B < B=+1/-1 : SENS DE RECHERCHE DE 'DEP'. LX DEP+X < INITIALISATION REGISTRE X SUR DEP, LY DEP+Y < INITIALISATION DE Y SUR Y(DEP). BSR ATEST < VALIDATION DE DEP. JNC DEP1 < OK, DEP=0. DEP4: EQU $ LAD M1 < ERREUR : DEP=1 !!! BSR APRINT BR AGOGE < ABORT. DEP1: EQU $ ADR B,Y < ACCES POINT AU-DESSOUS/AU-DESSUS. LR Y,A CP NLIG < VALIDATION DE Y. JLE DEP2 < OK, Y DANS L'IMAGE. LAD M2 < ERREUR, Y HORS L'IMAGE !!!! BSR APRINT BR AGOGE < PUIS ABORT... DEP2: EQU $ BSR ATEST < TEST DU POINT (X,Y). JC DEP3 < ON S'ARRETE SUR LE 1ER POINT < A 1 SUIVANT UN POINT A 0. STY DEP+Y < SINON, LE POINT (X,Y) DEVIENT < LE NOUVEAU POINT DEP. JMP DEP1 < ET ON RECOMMENCE... DEP3: EQU $ < < DEP EST NOTRE POINT DE DEPART : < LX DEP+X LY DEP+Y BSR ASETV < MARQUAGE DU POINT DE DEPART. BSR ASETW < MEMORISATION DES LASTY... < < 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 $ STZ KAROT < RAZ DU COMPTEUR DES RETOURS A 'PTC'... 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 $ IC KAROT < ET UN RETOUR DE PLUS !!! XKAROT:: VAL 4 < SEUIL DE TEST DE 'KAROT'... LA KAROT CPI XKAROT*4 < ??? JGE DEP4 < LE POINT DE DEPART EST SUREMENT DANS < UN COULOIR !!! 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 $ IC ITEST < AFIN DE TESTER LES POINTS A 1... < < ELIMINATION DE L'ENTREE DANS UN COULOIR : < (SOURCE DE LIGNE ET DE POINTS DOUBLES) < LA ANGLE STA SANGLE PSR X,Y LAI 16 LBI 0 BSR AROT1 BSR AMOV BSR AVOISY < "1ER DROITE"... BSR AMOV BSR AVOISY < "2EME DROITE"... BSR AROT1 BSR AMOV BSR AVOISY < "2EME ARRIERE-DROITE"... BSR AROT1 BSR AMOV BSR AVOISY < "1ER ARRIERE-DROITE"... BSR AMOV BSR AMOV BSR AVOISY < "1ER ARRIERE-GAUCHE"... BSR AMOV BSR AVOISY < "2EME ARRIERE-GAUCHE"... BSR AROT1 BSR AMOV BSR AVOISY < "2EME GAUCHE"... BSR AROT1 BSR AMOV BSR AVOISY < "1ER GAUCHE"... BSR AROT3 PLR X,Y LA SANGLE STA ANGLE < < DETECTION DES CONFIGURATIONS DANGEREUSES : < ("A" SIGNIFIE "ARRIERE", < "D" SIGNIFIE "DROITE", < "G" SIGNIFIE "GAUCHE", < "1" ET "2" SIGNIFIENT "1ER" ET "2EME") < LAI '81 BSR AMASK < D1 G1, LAI '11 BSR AMASK < D1 AG1, LAI '88 BSR AMASK < AD1 G1, LAI '41 BSR AMASK < D1 G2, LAI '21 BSR AMASK < D1 AG2, LAI '82 BSR AMASK < D2 G1, LAI '84 BSR AMASK < AD2 G1, LAI '12 BSR AMASK < D2 AG1, LAI '48 BSR AMASK < AD1 G2. JMP CONT30 < < SOUS-PROGRAMME DE DETECTION D'UNE CONFIGURATION DANGEREUSE : < (DANS 'A' ON TROUVE LA FORME DE LA < CONFIGURATION DANGEREUSE ; SI ELLE < EST PRESENTE, ON VA BRUTALEMENT EN < 'CONT5') < MASK: EQU $ PSR B < SAVE L'ETAT DES VOISINS... ANDR A,B CPR A,B < ??? JNE MASK1 < L'ETAT 'A' N'EST PAS PRESENT, OK... ADRI -2,K < IL EST LA, ON EST DANS UN COULOIR !!! JMP CONT5 MASK1: EQU $ PLR B RSR < < CAS D'UN POINT NOIR QUI N'ENTRE PAS DANS UN COULOIR : < CONT30: 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). LA KAROT < EST-ON EN TRAIN DE BOUCLER ??? CPI XKAROT*1 JL CONT32 CONT38: EQU $ BSR AROT3 < OUI, ON TOURNE NOS RECHERCHES... CPI XKAROT*2 JL CONT32 BSR AROT3 < OUI, ENCORE !!! CPI XKAROT*3 JGE DEP4 < ERREUR SUR LE POINT DE DEPART, IL EST < SUREMENT DANS UN COULOIR... CONT32: EQU $ BSR AROT1 < ON SE PLACE A DROITE DU < MOUVEMENT (VX,VY). BSR AMOV BSR AVOISI < ET ON TESTE LES 3 POINTS < IMMEDIATEMENT A DROITE DU < POINT COURANT SUIVANT LE < MOUVEMENT (VX,VY). BSR AROT1 BSR AMOV BSR AVOISI BSR AROT1 BSR AROT1 BSR AMOV BSR AMOV BSR AVOISI PLR X,Y < RESTAURE LE POINT COURANT. LA SANGLE STA ANGLE < RESTAURE ANGLE. LA SVX STA VX < RESTAURE VX. LA SVY STA VY < RESTAURE VY. 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). < < MARQUAGE DU POINT (X,Y) : < BSR AXISTV < LE POINT (X,Y) N'AURAIT-IL PAS ETE < DEJA MARQUE ??? CPZ INDIC JNE CONT34 < NON, ON LE MARQUE... IC MULTI < OUI, ON MEMORISE LE FAIT QUE L'ON < FAIT UN MARQUAGE BOUCLE !!! LA MULTI CPI 2 JG CONT5 < ET OUI... JMP CONT35 < VERS LE MARQUAGE... CONT37: EQU $ BR ALOOP < VERS 'CONT1'... CONT34: EQU $ STZ MULTI < REINITIALISATION... CONT35: EQU $ BSR ASETV < MARQUAGE DE (X,Y) S'IL EST NOIR... BSR ASETW < MEMORISATION DES LASTY... LR X,A CP DEP+X < EST-ON AU POINT DE DEPART ??? JNE CONT37 < NON, AU SUIVANT... LR Y,A CP DEP+Y < EST-ON AU POINT DE DEPART ??? JNE CONT37 < NON, AU SUIVANT... < < ON A LE CONTOUR INTERIEUR : < CONT7: EQU $ LAD M5 < PARCOURS EXTERIEUR A PRIORI. CPZ ANGLE < INTERIEUR OU EXTERIEUR ??? JG CONT60 < EXTERIEUR. JL CONT70 < INTERIEUR. WORD '1E16 < E R R E U R P R O G !!! CONT70: EQU $ LAD M4 < INTERIEUR. CONT60: EQU $ BSR APRINT < ENVOI DU MESSAGE. < < SELECTION DE LA COULEUR DU REMPLISSAGE : < CONT90: EQU $ LAD M8 BSR APRINT LAD DEMREP SVC 0 LBY REP < A=REPONSE, ADRI -"0",A < DECODAGE BINAIRE, JALE CONT90 < ERREUR... CPI NIVMAX JG CONT90 < ERREUR... STA COLOR < COULEUR DU REMPLISSAGE (1-7)... < < DEFINITION DU TRAMAGE : < ERDN1: EQU $ LAD M10 BSR ACOORD JAE ERDN6 < PAS D'ALEATOIRE... (MRDN=DRDN=0) STA MRDN < MULTIPLICATEUR, LAD M11 BSR ACOORD STA DRDN < ET DIVISEUR : < ON RENTRE UN NOMBRE COMPRIS ENTRE < 1 ET 255 ; LORSQUE LE NOMBRE ALEATOIRE < CALCULE EST DIVISIBLE PAR 'DRDN', ON < TRACE LE POINT COURANT PAR 'SETV' ; < LORSQUE DRDN=1, TOUS LES POINTS SONT < TRACES... CP MRDN JL ERDN1 < IL FAUT M<=D... ERDN6: EQU $ < NOTA : DRDN=0 EQUIVAUT A DRDN=1... < < RECUPERATION DU CONTOUR : < BSR ACONTI < ON AMENE EN MEMOIRE IMAGE < LE CONTOUR QUE L'ON A < GENERE, CAR C'EST DE LUI < QU'ON VEUT LES LIMITES !!! < < 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. < < R E M P L I S S A G E D U C O N T O U R : < CONT18: EQU $ LAD M9 BSR APRINT < "DETOURAGE?" LAD DEMREP SVC 0 LBY REP < ENTREE DE LA REPONSE : CPZ ANGLE < EST-ON INTERIEUR OU EXTERIEUR ??? JL CONT80 < INTERIEUR... < < CAS D'UN CONTOUR EXTERIEUR : < CPI "O" JE CONT50 < PAS DE DETOURAGE, ON CUMULE... CPI "N" JNE CONT18 < !??!??! JMP CONT81 < DETOURAGE, ON RAZE LE CONTOUR... < < CAS D'UN CONTOUR INTERIEUR : < CONT80: EQU $ CPI "N" JE CONT50 < "N" : NON, PAS DE DETOURAGE, ON CUMULE < DONC LE CONTOUR ET SON INTERIEUR... CPI "O" JNE CONT18 < ??!??! < < "O" : ON FAIT DU DETOURAGE, < DONC, IL FAUT RAZER LE CONTOUR : < CONT81: EQU $ BSR ARAZDK < CLEAR DE L'IMAGE VIRTUELLE. CONT50: EQU $ < < SUPPRESSION EVENTUELLE DES POINTS 0-ISOLES OU 1-ISOLES : < STZ ITEST IC ITEST ISOL8: EQU $ 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 $ 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). PSR B < SAVE LE NOMBRE AVANT LES VERTICAUX... BSR AVOISI ADRI 1+1,Y < POINT (X,Y+1). BSR AVOISI ADRI -1,Y < RETOUR AU POINT (X,Y). PLR A < A=NOMBRE DE VOISINS AVANT LES VERTICAUX. SBR B,A NGR A,A CPR A,B JNE ISOL93 < IL N'Y A PAS QUE DES VERTICAUX... CPI 2 JNE ISOL93 < LE POINT N'A PAS 2 VOISINS VERTICAUX... PSR C LA ALIMAG ADR A,C BSR ATEST < LORSQU'UN POINT A 2 VOISINS VERTICAUX, < ON REGARDE S'IL EST EN MEMOIRE LASTY... PLR C JC ISOL93 < OUI, ON LE GARDE... BSR ARESET < NON, ON L'EFFACE... ISOL93: EQU $ LR B,A < A=NBRE DE VOISINS DE (X,Y). JANE ISOL10 < OK POINT 1-ISOLE AU MOINS... BR ADEP4 < ERREUR SUR LE POINT DE DEPART, IL < S'AGISSAIT SUREMENT D'UN POINT NOIR < SEUL ENTRE PLEIN DE POINTS BLANCS... ISOL10: EQU $ CPI 1 JG ISOL7 < ON LE GARDE... < < ELIMINATION DES POINTS 0-ISOLES ET 1-ISOLES : < ISOL12: EQU $ BSR ARESET < OUI, ON L'ELIMINE. PSR Y,C LA ALIMAG ADR A,C BSR ARESET < MAJ DE LA MEMOIRE DES LASTY. ADRI 1,Y BSR ARESET PLR Y,C IC NISOL < ET ON COMPTE LES POINTS < AINSI EFFACES. 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. < < < R E M P L I S S A G E D U C O N T O U R : < < LY YMAX < Y=NUMERO DE LIGNE. CONT20: EQU $ LXI 0 < X=NUMERO DE POINT SUR LA LIGNE. CONT21: EQU $ BSR AEXIST < TEST DU POINT M(X,Y)... JANE CONT22 < IL EST NOIR, OU IL N'EXISTE PAS !!! < < CAS OU ON TROUVE UN PREMIER POINT BLANC : < STZ KVOISH < COMPTAGE DES VOISINS DE DESSUS, STZ KVOISB < COMPTAGE DES VOISINS DE DESSOUS. < < RECHERCHE DU PREMIER POINT NOIR SUIVANT LE PREMIER POINT BLANC : < CONT25: EQU $ BSR ASP1 < COMPTAGE DES VOISINS DESSUS/DESSOUS... ADRI 1,X LR X,A CP NPPL JG CONT23 < ON EST EN BOUT DE LIGNE, ON EN CHANGE. BSR ATEST < TEST DU POINT (X,Y) ??? JC CONT25 < ENCORE UN BLANC... BSR ASP2 < INFLEXION OU TANGENCE ??? JAE CONT21 < IL S'AGIT D'UNE TANGENCE HORIZONTALE, < IL NE FAUT PAS REMPLIR... < < CAS D'UN POINT D'INFLEXION : < CONT40: EQU $ < < REMPLISSAGE D'UN SEGMENT NOIR : < CONT27: EQU $ BSR ATEST JC CONT28 < ARRET SUR LE PREMIER POINT BLANC... LA DRDN CPI 1 JLE ERDN3 < DANS CE CAS, ON TRACE SYSTEMATIQUEMENT... < (POUR DRDN=1, ON TROUVERAIT TOUJOURS UN < NOMBRE DIVISIBLE PAR 1...) LA MRDN STA XRDN < INITIALISATION DU MULTIPLICATEUR < COURANT... ERDN5: EQU $ BSR ARDN < CALCUL D'UN NOMBRE ALEATOIRE, SARD NBITMO DV DRDN CPZR B < EST-IL DIVISIBLE PAR 'DRDN' ??? JE ERDN4 < OUI, ON LE TRACE... DC XRDN < NON, ITERONS SUR 'RDN' : JG ERDN5 < OUI... JMP ERDN2 < NON, ON NE TRACE DONC PAS CE POINT... ERDN4: EQU $ ERDN3: EQU $ BSR ASETV < OUI, ON LE MARQUE... ERDN2: EQU $ ADRI 1,X < AU SUIVANT... LR X,A CP NPPL JLE CONT27 CONT28: EQU $ STZ KVOISH < COMPTAGE DES VOISINS DE DESSUS, STZ KVOISB < COMPTAGE DES VOISINS DE DESSOUS. ADRI -1,X < < ELIMINATION DES POINTS BLANCS A LA SUITE DU REMPLISSAGE : < CONT29: EQU $ ADRI 1,X LR X,A CP NPPL JG CONT23 < CHANGEMENT DE LIGNE... BSR ATEST < TEST DU POINT M(X,Y)... JNC CONT47 < POINT NOIR, FIN DU SEGMENT BLANC... BSR ASP1 < COMPTAGE DES VOISINS DESSUS/DESSOUS... JMP CONT29 < VERS LE BLANC SUIVANT... CONT47: EQU $ BSR ASP2 < INFLEXION OU TANGENCE ??? JAE CONT40 < IL FAUT REPRENDRE LE REMPLISSAGE CAR < CE SEGMENT BLANC N'ETAIT PAS UN < SEGMENT D'INFLEXION... JMP CONT21 < DES QU'UN NOIR EST TROUVE, ON RECOMMENCE < LE PROCESSUS... < < RECHERCHE D'UN POINT SUIVANT SUR LA LIGNE : < CONT22: EQU $ ADRI 1,X LR X,A CP NPPL JLE CONT21 < ON RESTE SUR LA MEME LIGNE... < < CHANGEMENT DE LIGNE : < CONT23: EQU $ ADRI -1,Y LR Y,A CP YMIN JGE CONT20 < VERS LA NOUVELLE LIGNE... < < < C O L O R I A G E D U C O N T O U R : < < BSR ACONTI < APPEL EN RESIDENT DU REMPLISSAGE, LXI TVPR BSR ASPOR2 < COLORIAGE EN ROUGE... LXI TVPV BSR ASPOR2 < COLORIAGE EN VERT... LXI TVPB BSR ASPOR2 < COLORIAGE EN BLEU... BR AGOGE < C'EST FINI... PAGE < < < I M P L A N T A T I O N : < < X12: EQU ZERO+PILE-LTNI-LTNI X10: VAL X12-$ ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE VOLONTAIRE < SI MAUVAISE IMPLANTATION... DZS X10+1 < PAR PROPRETE !!!! EOT #SIP GEN PROCESSEUR#