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#
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.