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