NMTW: VAL "TW"
NMTX: VAL "TX"
NMTY: VAL "TY"
NMM: VAL " M"
NMN: VAL " N"
NMO: VAL " O"
IF NMPROC-NMTX,,XWOR%,
IF NMPROC-NMTW,,XWOR%,
IF NMPROC-NMM,,XWOR%,
IF NMPROC-NMN,,XWOR%,
IF NMPROC-NMTY,,XWOR%,
IF NMPROC-NMO,,XWOR%,
IF ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
IDP "TW - VERSION A NIVEAUX DE GRIS DE TV"
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
IDP "TX - VERSION TRI-DIMENSIONNELLE DE TW"
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
IDP "TY - VERSION TRANSFORMATION CONFORME DE TW"
XWOR%9: VAL 0
IF NMPROC-NMM,XWOR%9,,XWOR%9
IDP " M - VERSION DE 'TW' INTERPRETATIVE"
XWOR%9: VAL 0
IF NMPROC-NMN,XWOR%9,,XWOR%9
IDP " N - VERSION DE 'TX' INTERPRETATIVE"
XWOR%9: VAL 0
IF NMPROC-NMO,XWOR%9,,XWOR%9
IDP " O - VERSION DE 'TY' INTERPRETATIVE"
XWOR%9: VAL 0
IDP "RELEASE 27/05/1980"
EOT #SIP DEFINITION CMS5#
EOT #SIP DEF PROCESSEUR#
PROG
WORD TW < POINT D'ENTREE...
WORD 0
PTW: EQU $ < DOIT VALOIR '12...
LRP L
BR -2,L < ENTREE DANS LE PROCESSEUR...
EOT #SIP DEFINITION ITEM#
ITEM2: EQU ZERO+PILE-LTNI-LTNI
EOT #SIP IMAGE 256#
NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT.
NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT...
NBRHEX: VAL 4 < NOMBRE DE CHIFFRES HEXAS PAR MOT.
BIT: VAL 1
NMOTL: VAL CNMPL < NOMBRE DE MOTS PAR LIGNE.
NLIG: VAL LIMAG/NMOTL < NOMBRE DE LIGNES PAR TRAME.
NLIGM1: VAL NLIG-1 < ORDONNEE MAXIMALE.
XWOR%1: VAL NLIGM1+1
XWOR%2: VAL XWOR%1=0
IF BIT>XWOR%2-XWOR%1,,XWOR%,
IF ATTENTION : 'NLIGM1' DOIT ETRE UN MASQUE !!!
XWOR%: VAL 0
NPOLM1: VAL NMOTL*NBITMO-1 < ABSCISSE MAXIMALE.
XWOR%1: VAL NPOLM1+1
XWOR%2: VAL XWOR%1=0
IF BIT>XWOR%2-XWOR%1,,XWOR%,
IF ATTENTION : 'NPOLM1' DOIT ETRE UN MASQUE !!!
XWOR%: VAL 0
NCOOL: VAL 3 < NOMBRE DE COULEURS DE BASE.
NIVMAX: VAL BIT>NCOOL-BIT < NIVEAU MAX RECONNU.
MFFFF: VAL 'FFFF < MASQUE DU MOT.
EOT: VAL '04 < CARACTERE 'EOT'.
SGNDLN: VAL 3 < FONCTION DE DELETE SGN,
SGNSTN: VAL 4 < FONCTION DE STORE SGN,
SGNLON: VAL 5 < FONCTION DE LOAD SOUS ACN SGN,
SGNLNS: VAL 6 < FONCTION DE LOAD SOUS :SYS SGN.
PAGE
<
<
< S E L E C T I O N D U M O D E D ' E N T R E E :
<
<
NMPROD: VAL NMPROC < SAUVEGARDE DU NOM REEL DU PROCESSEUR,
< ON NE SAIT JAMAIS ??!?!?!?
VISU: VAL 0 < MODE D'ENTREE PAR LA VISU,
ITEM: VAL 1 < MODE D'ENTREE PAR L'ITEM1.
MODE: VAL VISU < A PRIORI, 'TW'/'TX' : ENTREE VISU...
IF NMPROC-NMM,XWOR%,,XWOR%
NMPROC: VAL NMTW < SI " M", ON LE REMPLACE PAR "TW",
MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1.
XWOR%: VAL 0
IF NMPROC-NMN,XWOR%,,XWOR%
NMPROC: VAL NMTX < SI " N", ON LE REMPLACE PAR "TX",
MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1.
XWOR%: VAL 0
IF NMPROC-NMO,XWOR%,,XWOR%
NMPROC: VAL NMTY < SI " O", ON LE REMPLACE PAR "TY",
MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1.
XWOR%: VAL 0
PAGE
<
<
< D E F I N I T I O N D E L ' I M A G E :
<
<
NOM: EQU ZERO+PILE+5-LNOM
IMAG: EQU NOM+LNOM
IMAGE: EQU IMAG
IMAGR: EQU IMAGE+0
IMAGV: EQU IMAGR+LIMAG
IMAGB: EQU IMAGV+LIMAG
AMASK: VAL NCOOL*LIMAG < ADRESSE DU MASQUE DANS LA 'CDA'.
LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE
< L'EOT A PRIORI...
PAGE
<
<
< M E S S A G E S :
<
<
MMCDA: BYTE 5;'6D
MCDAP: ASCI "!CDA"
PI: BYTE "P";EOT
MCDA: ASCI "!CDA"
BYTE EOT;0
REP: DZS NBRHEX/NOCMO < BUFFER DES REPONSES.
MERR: BYTE 1;"?"
IF MODE-VISU,XWOR%7,,XWOR%7
MINT: BYTE 2;'6D;">";0
MNOM: BYTE 5;'6D
ASCI "NOM="
MORGX: BYTE 3;'6D
ASCI "X="
MORGY: BYTE 3;'6D
ASCI "Y="
IF NMPROC-NMTW,XWOR%9,,XWOR%9
MMC: BYTE 5;'6D
ASCI "RVB?"
MMS: BYTE 6;'6D
BYTE "S";" ";"M";'08;'08
XWOR%9: VAL 0
MFOND: BYTE 6;'6D
ASCI "FOND= "
MTORE: BYTE 6;'6D
ASCI "TORE? "
IF NMPROC-NMTW,XWOR%,,XWOR%
MIMA: BYTE 7;'6D
ASCI "MASK=?"
MMAH: BYTE 3;'6D
ASCI "H="
MMAV: BYTE 3;'6D
ASCI "V="
XWOR%: VAL 0
IF NMPROC-NMTX,XWOR%,,XWOR%
MPOINT: BYTE 5;'6D
ASCI "#PT="
MPASQ: BYTE 5;'6D
ASCI "PAS="
MFLOU: BYTE 6;'6D
ASCI "FLOU? "
MMAX: BYTE 5;'6D
ASCI "MAX?"
MPOND: BYTE 8;'6D
ASCI "PONDER? "
MNIVO: BYTE 9;'6D
ASCI "NIVEAUX="
MTRAM: BYTE 7;'6D
ASCI "TRAME?"
MSENS: BYTE 6;'6D;"S";" ";"R";'08;'08
MPROJ: BYTE 3;'6D
ASCI "P="
XWOR%: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
MK: BYTE 3;'6D
ASCI "K="
MSENS: BYTE 6;'6D;"S";" ";"R";'08;'08
MTRAN: BYTE 24;'6D
ASCI "1/Z=1 OU Z2=2 OU MAP=3?"
MPROJ: BYTE 3;'6D
ASCI "P="
XWOR%9: VAL 0
MASKO: BYTE 5;'6D
ASCI "MSK?"
MODM: BYTE 5;'6D
ASCI "MOD="
IF NMPROC-NMTW,XWOR%9,,XWOR%9
MAT11: BYTE 5;'6D
ASCI "M11="
MAT12: BYTE 5;'6D
ASCI "M12="
MAT21: BYTE 5;'6D
ASCI "M21="
MAT22: BYTE 5;'6D
ASCI "M22="
XWOR%9: VAL 0
MSLAS: BYTE 1;"/"
MTRX: BYTE 4;'6D
ASCI "CX= "
MTRY: BYTE 4;'6D
ASCI "CY= "
IF NMPROC-NMTX,XWOR%9,,XWOR%9
MTRZ: BYTE 4;'6D
ASCI "CZ= "
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
MNIVO: BYTE 5;'6D
ASCI "NIV="
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
MDX: BYTE 4;'6D
ASCI "DX= "
MDY: BYTE 4;'6D
ASCI "DY= "
XWOR%9: VAL 0
XWOR%7: VAL 0
<
< ZONE EN RECOUVREMENT :
<
BUFIN: EQU ITEM2 < BUFFER D'ENTREE DES FONDS.
LBUFIN: VAL NBITMO/NOCMO
LBUFMH: VAL NPOLM1+1/NBITMO < LONGUEUR DU MASQUE HORIZONTAL,
LBUFMV: VAL NLIGM1+1/NBITMO < LONGUEUR DU MASQUE VERTICAL.
BUFMH: EQU BUFIN+LBUFIN < MASQUE HORIZONTAL,
BUFMV: EQU BUFMH+LBUFMH < MASQUE VERTICAL.
LSTACK: VAL 40 < LONGUEUR DE LA PILE DE TRAVAIL.
STACK: EQU BUFMV+LBUFMV < PILE DE TRAVAIL.
PAGE
<
<
< L O C A L :
<
<
LOCAL
LOC: EQU $
<
< CONSTANTES :
<
IF MODE-VISU,XWOR%7,,XWOR%7
NGE: ASCI "GE" < NOM DU PROCESSEUR DE RETOUR.
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
NSD: ASCI "SD" < NOM DE L'OVERLAY D'APPEL.
TCALL: WORD "GE";"EI" < NOM DES OVERLAYS DE RETOUR SI ALT-MODE.
NCALL: WORD TCALL,X
NPCALL: WORD 0 < NOM DU PROCESSEUR DE RETOUR SI ALT-MODE.
XWOR%7: VAL 0
SAVER: WORD 0 < SAUVEGARDE D'UN MOT DE LA TRAME
< RESIDENTE ROUGE,
SAVEV: WORD 0 < DE MEME POUR LE VERT,
SAVEB: WORD 0 < DE MEME POUR LE BLEU.
MCDAR: WORD 0 < SAUVEGARDE D'UN MOT DE LA TRAME
< SCRATCH ROUGE,
MCDAV: WORD 0 < DE MEME POUR LE VERT,
MCDAB: WORD 0 < DE MEME POUR LE BLEU.
SAVEK: WORD 0 < SAUVEGARDE DU REGISTRE 'K'.
KIN: WORD -1 < COMPTEUR DES ENTREES...
IF MODE-VISU,XWOR%7,,XWOR%7
NMOTS: WORD 2*LTNI < LONGUEUR MOTS DES 2 ITEMS.
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
NMOTS: WORD LTNI < POUR NE RAZER QUE L'ITEM2...
XWOR%7: VAL 0
XR: WORD 0 < COORDONNEE X D'UN POINT RESIDENT,
YR: WORD 0 < COORDONNEE Y D'UN POINT RESIDENT,
XS: WORD 0 < COORDONNEE X D'UN POINT SCRATCH,
YS: WORD 0 < COORDONNEE Y D'UN POINT SCRATCH.
IF NMPROC-NMTY,XWOR%9,,XWOR%9
FXS: FLOAT 0
FYS: FLOAT 0
FRS: FLOAT 0
FK: FLOAT 1
SENS: WORD 0 < SENS DE LA TRASFORMATION :
< 0 : R --> S,
< 1 : S --> R.
XTRAN: WORD 0 < TYPE DE LA TRANSFORMATION CONFORME :
< 0 : Z=K/Z,
< 1 : Z=K*Z*Z.
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
<
< CONSTANTES DE CALCUL DES SINUS ET COSINUS :
<
ASIN: WORD SIN < S/P DE CALCUL DU SINUS,
ACOS: WORD COS < ET DU COSINUS.
ZZZ061: DZS 2 < NB EN FLOTTANT
ZZZ062: DZS 2
ZZZ063: DZS 1 < SIGNE
DEUXPI: FLOAT 6.2831853 < 2 PI
PI3141: FLOAT 3.1415926 < PI
PISUR2: FLOAT 1.5707963 < PI/2
RADIAX: FLOAT 40.58451 < 255/(2*PI).
RADIAY: FLOAT 81.16902 < 255/PI.
ZZZ067: EQU PISUR2 < CSTES DU POLYNOME
ZZZ068: WORD 'AD00;'5110
ZZZ069: WORD '51FD;'9A2C
ZZZ070: WORD 'B3F9;'6CCE
ZZZ071: WORD '4FF4;'6BDD
RAYON: EQU FK < RAYON DE LA SPHERE.
SINT: FLOAT -0.5
COST: FLOAT 0.86602
IPROJ: WORD 0 < 0 : MODE DE PROJECTION PAR COST,SINT ;
< 1 : MODE DE PROJECTION PERSPECTIVE.
PZ: FLOAT 0
F1: FLOAT 1
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
FXS: FLOAT 0
FYS: FLOAT 0
FZS: FLOAT 0
FXR: FLOAT 0
FYR: FLOAT 0
FZR: FLOAT 0
SENS: WORD 0 < SENS DE LA TRANSFORMATION :
< 0 : R --> S,
< 1 : S --> R.
LB0: WORD 0 < LONGUEUR DU BRAS COURANT DE LA SPIRALE.
LB: WORD 0 < NOMBRE DE POINTS ENCORE A TRAITER
< SUR LE BRAS COURANT DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINTS DEJA TRAITES,
NPM: WORD 0 < NOMBRE DE POINTS A TRAITER.
DELTAX: WORD 0 < PAS D'INCREMENTATION DE X,
DELTAY: WORD 0 < PAS D'INCREMENTATION DE Y.
PASQ: WORD 1 < VALEUR INITIALE DU PAS...
CUMUL: WORD 0 < CUMUL DES NIVEAUX DES POINTS D'UNE
< SPIRALE.
IFLOU: WORD 0 < 0 : CALCUL D'UN FLOU EN (XR,YR),
< 1 : ELIMINATION DES POINTS NOIRS.
ISMAX: WORD 0 < 0 : LORS DE L'ELIMINATION DES POINTS
< NOIRS, FAIRE UNE MOYENNE SUR LA
< SPIRALE,
< 1 : LORS DE L'ELIMINATION DES POINTS
< NOIRS, PRENDRE LE MAX RENCONTRE SUR
< LA SPIRALE.
XSMAX: WORD 0 < MAX COURANT SUR LA SPIRALE.
NPMAX: WORD 0 < 'NP' DU XSMAX COURANT...
LNIV: WORD 0 < DONNE DANS L'OCTET GAUCHE LES NIVEAUX A
< TESTER LORS DU BOUCHAGE DES TROUS :
< LNIV(I)=1 : LES POINTS DE NIVEAU 'I'
< SERONT TESTES...
< DANS SON OCTET DROIT, IL DONNE LA
< VALEUR INITIALE DE 'DRDN'...
IPOND: WORD 0 < 0 : NE PAS PONDERER (ON PREND XSMAX),
< 1 : PONDERER (ON PREND XSMAX*NPMAX/NPM).
<
< DONNEES POUR LE GENERATEUR ALEATOIRE :
<
ITRAM: WORD 0 < INDICATEUR DE TRAMAGE :
< 0 : FONCTIONNEMENT NORMAL SANS TRAMAGE,
< 1 : TRAMAGE : LES COULEURS SONT REMPLACEE
< PAR UNE TRAME DE BLANC/NOIR DONT LA
< DENSITE EST FONCTION DU NIVEAU
< CALCULE SUR LA SPIRALE.
RDN9: WORD 0 < SECONDE COURANTE...
DRDN: WORD NIVMAX*NIVMAX < DIVISEUR DU NOMBRE ALEATOIRE :
< IL EST INITIALISE A PARTIR DE L'OCTET
< DROIT DE 'LNIV'...
ATAUX: WORD TAUX,X < ACCES A LA TABLE DONNANT LA PROPORTION
< DE BLANC/NOIR POUR CHAQUE NIVEAU DE
< GRIS :
TAUX: EQU $
BYTE 0;1*1;2*2;3*3;4*4;5*5;6*6;7*7
IF $-TAUX*NOCMO-NIVMAX-1,,XWOR%,
IF ATTENTION : 'TAUX' EST MAUVAISE !!!
XWOR%: VAL 0
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
RDN1: WORD 5189 < CONSTANTE DE CALCUL
RDN3:: VAL 19 < DES NOMBRE ALEATOIRES...
POINTS: WORD 16807
KRDN1: WORD 0
XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'.
XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'.
XWOR%9: VAL 0
ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH
< PAR RAPPORT A L'IMAGE RESIDENTE,
ORGY: WORD 0 < DE MEME, ORIGINE EN Y...
MODX: WORD 0 < 0 : "TORE" SUR LES X,
< 1 : L'IMAGE SCRATCH NE SE REFERME PAS...
MODY: WORD 0 < DE MEME SUR L'AXE DES Y.
WORK1: WORD 0 < VARIABLE DE TRAVAIL...
IF NMPROC-NMTW,XWOR%9,,XWOR%9
AEMETT: WORD 0 < ADRESSE DE L'EMETTEUR EN 'CDA' LORS
< DES GENERATIONS/RECUPERATIONS DU
< MASQUE D'IMAGE.
ARECEP: WORD 0 < DE MEME, ADRESSE DU RECEPTEUR...
XWOR%9: VAL 0
MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'.
XWORK: WORD 0 < INDEX DE GENERATION DES FONDS...
IMASKO: WORD 0 < 0 : MASK OFF,
< 1 : MASK ON...
IF NMPROC-NMTW,XWOR%9,,XWOR%9
NIVEAU: WORD 0 < NIVEAU RECHERCHE LORS DE 'C'...
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
EX: WORD 0 < DIMENSION HORIZONTALE DU MAILLAGE.
EY: WORD 0 < DIMENSION VERTICALE DU MAILLAGE.
NDX: WORD 0 < 'DX' TEMPORAIRE,
NDY: WORD 0 < 'DY' TEMPORAIRE.
NPOINT: WORD 0 < NOMBRE DE POINTS DANS UNE MAILLE=DX*DY.
CUMUL: WORD 0 < SOMME DES NIVEAUX INTERNES D'UNE
< MAILLE COURANTE.
XDX: WORD 0 < NOMBRE DE MAILLE SUR L'HORIZONTALE,
XDY: WORD 0 < NOMBRE DE MAILLES SUR LA VERTICALE.
XNDX: WORD 0 < 'XDX' TEMPORAIRE,
XNDY: WORD 0 < 'XDY' TEMPORAIRE.
XWOR%9: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
<
< DONNEES DE SIMULATION DES ENTREES :
<
IEG: WORD 0 < INDEX COURANT DE L'ITEM1.
NCP: WORD NBCAR*NBLIG-LNOM < LONGUEUR MAX D'UN ITEM,
< ON RETRANCHE LNOM, CAR LE NOM
< D'UNE IMAGE DOIT ETRE IMPERATIVEMENT
< DEVANT L'IMAGE...
SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1.
ITEM1: EQU ZERO+PILE-LTNI
AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1.
ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT.
XWOR%7: VAL 0
<
< DONNEES POUR LA TRANSFORMATION :
<
FWORK: FLOAT 0 < VARIABLE DE TRAVAIL.
IF MODE-VISU,XWOR%7,,XWOR%7
IF NMPROC-NMTX,XWOR%9,,XWOR%9
MAT: BYTE 6;'6D
ASCI " M"
MATN: WORD 0 < NUMERO DE L'ELEMENT COURANT...
ASCI "= "
XWOR%9: VAL 0
XWOR%7: VAL 0
F05: FLOAT 0.5 < POUR LES ARRONDIS...
IF NMPROC-NMTW,XWOR%9,,XWOR%9
M11: FLOAT 1 < MATRICE
M12: FLOAT 0 < DE
M21: FLOAT 0 < TRANSFORMATION
M22: FLOAT 1 < UNITE...
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
M11: FLOAT 1
M12: FLOAT 0
M13: FLOAT 0
M21: FLOAT 0
M22: FLOAT 1
M23: FLOAT 0
M31: FLOAT 0
M32: FLOAT 0
M33: FLOAT 1
AM: WORD M11,X < ACCES A LA MATRICE TRI-DIMENSIONNELLE.
XWOR%9: VAL 0
TRX: WORD 0 < TRANSLATION EN X,
TRY: WORD 0 < TRANSLATION EN Y.
IF NMPROC-NMTX,XWOR%9,,XWOR%9
TRZ: WORD 0 < TRANSLATION EN Z.
COST: FLOAT 0.86602 < POUR LA PROJECTION
SINT: FLOAT -0.5 < 3D --> 2D
IPROJ: WORD 0 < 0 : MODE DE PROJECTION PAR COST,SINT ;
< 1 : MODE DE PROJECTION PERSPECTIVE.
PZ: FLOAT 0
F1: FLOAT 1
XWOR%9: VAL 0
<
< RELAIS DE TABLES, D'IMAGES...
<
ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES.
AMERR: EQU MERR < MESSAGE D'ERREUR.
IF MODE-VISU,XWOR%7,,XWOR%7
AMINT: EQU MINT < MESSAGE D'INVITATION.
AMNOM: EQU MNOM < "NOM="
AMORGX: EQU MORGX < "ORGX="
AMORGY: EQU MORGY < "ORGY="
IF NMPROC-NMTW,XWOR%9,,XWOR%9
AMMC: EQU MMC < "STACK?"
AMMS: EQU MMS < "SENS?"
XWOR%9: VAL 0
AMFOND: EQU MFOND < "FOND="
AMTORE: EQU MTORE < "TORE?"
IF NMPROC-NMTW,XWOR%,,XWOR%
AMIMA: EQU MIMA < "INIT MASK?"
AMMAH: EQU MMAH < "MASK H="
AMMAV: EQU MMAV < "MASK V="
XWOR%: VAL 0
AMASKO: EQU MASKO < "MASK ON?"
AMODM: EQU MODM < "MODE="
IF NMPROC-NMTW,XWOR%9,,XWOR%9
AMAT11: EQU MAT11 < "M11="
AMAT12: EQU MAT12 < "M12="
AMAT21: EQU MAT21 < "M21="
AMAT22: EQU MAT22 < "M22="
XWOR%9: VAL 0
AMSLAS: EQU MSLAS < "/"
AMTRX: EQU MTRX < "TX="
AMTRY: EQU MTRY < "TY="
IF NMPROC-NMTX,XWOR%9,,XWOR%9
AMTRZ: EQU MTRZ < "TZ="
AMPOIN: EQU MPOINT < "#POINTS="
AMPASQ: EQU MPASQ < "PAS="
AMFLOU: EQU MFLOU < "FLOU?"
AMMAX: EQU MMAX < "MAX?"
AMPOND: EQU MPOND < "PONDER?"
AMNIVO: EQU MNIVO < "NIVEAUX="
AMTRAM: EQU MTRAM < "TRAME?"
AMSENS: EQU MSENS < "S R"
AMPROJ: EQU MPROJ < "P="
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
AMK: EQU MK < "K="
AMSENS: EQU MSENS < "S R"
AMTRAN: EQU MTRAN < "1/Z Z2 ?"
AMPROJ: EQU MPROJ < "P="
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
AMNIVO: EQU MNIVO < "NIVEAU="
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
AMDX: EQU MDX < "DX="
AMDY: EQU MDY < "DY="
XWOR%9: VAL 0
XWOR%7: VAL 0
AREP: WORD REP < ACCES AU BUFFER DE REPONSE...
AREPX: WORD REP,X < DE MEME EN INDEXE...
ABUFIN: WORD BUFIN,X < ACCES AU BUFFER DE GENERATION DU FOND.
IF NMPROC-NMTW,XWOR%,,XWOR%
ABUFMH: WORD BUFMH,X < ACCES AU MASQUE HORIZONTAL,
ABUFMV: WORD BUFMV,X < ACCES AU MASQUE VERTICAL.
XWOR%: VAL 0
AMCDAP: EQU MCDAP < !CDAP.
AMCDA: EQU MCDA < !CDA.
AMMCDA: EQU MMCDA < !CDA.
API: WORD PI < RELAI POUR RANGER "P" OU "I"...
AIMAGR: WORD IMAGR,X < RELAI TRAME ROUGE,
AIMAGV: WORD IMAGV,X < RELAI TRAME VERTE,
AIMAGB: WORD IMAGB,X < RELAI TRAME BLEUE.
AITEM2: WORD ITEM2-1,X < POUR RAZER LES ITEMS 1 ET 2.
AEOT: WORD NOM+LNOMP < POUR FORCER UN EOT...
<
< RELAIS DE SOUS-PROGRAMMES :
<
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS...
APRINT: WORD PRINT < EDITION D'UN MESSAGE.
AENTER: WORD ENTER < ENTREE DE QUELQUE CHOSE SUR LA VISU...
AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE
AIN: WORD IN < ENTREE 1 CARACTERE,
AIHEX: WORD IHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX.
ACCI: WORD CCI < ACCES AU CCI.
AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN...
ASPAPR: WORD SPAPR < ACCES A UN POINT RESIDENT (X,Y).
ASPAPS: WORD SPAPS < ACCES A UN POINT SCRATCH (X,Y).
ASPSPR: WORD SPSPR < RANGEMENT D'UN POINT RESIDENT (X,Y).
ASPSPS: WORD SPSPS < RANGEMENT D'UN POINT SCRATCH (X,Y).
ASPGPR: EQU ASPAPR
ASPGPS: EQU ASPAPS
ASPRPR: EQU ASPSPR
ASPRPS: EQU ASPSPS
IF NMPROC-NMTX,,XWOR%9,
ASPOR: WORD SPOR < RESIDENT <-- (RESIDENT).OR.(SCRATCH),
ASPAND: WORD SPAND < RESIDENT <-- (RESIDENT).AND.(SCRATCH),
ASPEOR: WORD SPEOR < RESIDENT <-- (RESIDENT).EOR.(SCRATCH),
ASPINV: WORD SPINV < RESIDENT <-- .NOT.(RESIDENT).
XWOR%9: VAL 0
ASPSCD: WORD SPSCD < TRANSFERT BRUTAL EN SCRATCH.
ASPACD: WORD SPACD < TRANSFERT EN RESIDENT AVEC MASQUE,
ASPBCD: WORD SPBCD < TRANSFERT EN RESIDENT SANS MASQUE.
APMOV5: WORD PMOV5 < TV R --> RESIDENT,
APMOV6: WORD PMOV6 < TV V --> RESIDENT,
APMOV7: WORD PMOV7 < TV B --> RESIDENT.
IF NMPROC-NMTW,XWOR%,,XWOR%
ASFOND: WORD SFOND < GENERATION D'UN POINT DU FOND.
XWOR%: VAL 0
IF NMPROC-NMTX,XWOR%,,XWOR%
ASPMOY: WORD SPMOY < MOYENNE DES NIVEAUX DES POINTS SPIRALE.
XWOR%: VAL 0
IF NMPROC-NMTX,,XWOR%9,
ASPPER: WORD SPPER < PERMUTATION RESIDENT <--> SCRATCH.
XWOR%9: VAL 0
ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR).
IF NMPROC-NMTY,XWOR%9,,XWOR%9
ATRAN: WORD TRAN,X < ACCES AUX MODULES DE TRANSFORMATION :
XTR1:: VAL 0 < TRANSFORMATION CONFORME : Z=K/Z,
XTR2:: VAL 1 < TRANSFORMATION CONFORME : Z=K*Z*Z,
XTR3:: VAL 2 < MAPPING SUR UNE SPHERE.
TRAN: EQU $
WORD TRANS1;TRANS2;TRANS3
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
ASPFIL: WORD SPFIL < (XS,YS) <-- (XR,YR) SI NIVEAU, 0 SINON.
XWOR%9: VAL 0
APTRAN: WORD PTRANS < ENTREE D'UN COEFFICIENT DE LA MATRICE.
IF NMPROC-NMTX,XWOR%9,,XWOR%9
APIC: WORD PIC < ENTREE DE CX OU CY OU CZ.
XWOR%9: VAL 0
AROND: WORD ROND < ARRONDI FLOTTANT, ET CONVERSION ENTIERE.
ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE
< L'UN DES SOUS-PROGRAMMES PRECEDENTS.
ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES...
ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION.
AERROR: WORD ERROR < BRANCHEMENT EN ERREUR...
IF MODE-ITEM,XWOR%7,,XWOR%7
AALTM: WORD ALTM < TRAITEMENT DES RETOURS BRUTAUX...
XWOR%7: VAL 0
<
< DEMANDES A CMS5 :
<
DEMIN: WORD '0101 < ENTREE D'UN CARACTERE DE REPONSE.
WORD REP-ZERO*NOCMO
WORD 1
DEMFON: WORD '0101 < ENTREE DE LA VALEUR DU FOND.
WORD BUFIN-ZERO*NOCMO
WORD NBITMO
DEMHEX: WORD '0101 < ENTREE D'UN NOMBRE HEXA-DECIMAL.
WORD REP-ZERO*NOCMO
WORD NBRHEX
DEMOUT: WORD '0202 < ECRITURE D'UN MESSAGE SUR LA VISU.
WORD 0 < ADRESSE DU MESSAGE,
WORD 0 < ET SA LONGUEUR...
DEMMEM: WORD 4 < DEMANDE DE 16 K MOTS...
RELMEM: WORD 4 < RETOUR A 4K MOTS...
WORD '8000
WORD '2000
DEMLOD: BYTE '80?SGNLNS;'02 < DEMANDE DE CHARGEMENT DE "GE".
WORD BRANCH-ZERO*NOCMO
WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO
WORD -1
DEMCC: WORD 2 < ACCES AU CCI INTERPRETATIF.
WORD 0 < ADRESSE DE LA CARTE.
WORD 80
TVDKU: VAL '8A01 < ACCES A 'DKU' POUR LA 'TV'.
DEMTVR: WORD TVDKU < ACCES AU ROUGE.
WORD IMAGR-ZERO*NOCMO
WORD LIMAG*NOCMO
WORD TVPR
DEMTVV: WORD TVDKU < ACCES AU VERT.
WORD IMAGV-ZERO*NOCMO
WORD LIMAG*NOCMO
WORD TVPV
DEMTVB: WORD TVDKU < ACCES AU BLEU.
WORD IMAGB-ZERO*NOCMO
WORD LIMAG*NOCMO
WORD TVPB
NOMIN: WORD '0101 < ENTREE DU NOM D'UNE IMAGE.
WORD NOM-ZERO*NOCMO
WORD LNOMP*NOCMO
SGN: WORD '0002 < POUR LES ACCES AU SGN.
WORD NOM-ZERO*NOCMO
WORD LIMAG*NCOOL+LNOM*NOCMO
WORD -1 < LA VALEUR SUIT LE NOM...
PAGE
<
<
< T A B L E D E S C O M M A N D E S :
<
<
REP0: VAL "+" < PREMIERE COMMANDE.
KOM: EQU $-REP0 < ELLES COMMENCENT A "+"...
WORD STORE < + : STORE SGN LE RESIDENT
WORD ERROR < ,
WORD DELETE < - : DELETE SGN LE RESIDENT
WORD ERROR <.
WORD ERROR < /
WORD MOV0 < 0 : TV <-- RESIDENT R+V+B
WORD MOV1 < 1 : TV <-- RESIDENT R
WORD MOV2 < 2 : TV <-- RESIDENT V
WORD MOV3 < 3 : TV <-- RESIDENT B
WORD MOV4 < 4 : RESIDENT <-- TV R+V+B
WORD MOV5 < 5 : RESIDENT <-- TV R
WORD MOV6 < 6 : RESIDENT <-- TV V
WORD MOV7 < 7 : RESIDENT <-- TV B
WORD ERROR < 8
WORD ERROR < 9
WORD ERROR < :
WORD ERROR < ;
WORD ERROR < <
WORD DTRANS < = : DEFINITION DE LA MATRICE M(I,J)
WORD ERROR < >
WORD ERROR < ?
WORD ERROR < @
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < A
XWOR%9: VAL 0
IF NMPROC-NMTX,,XWOR%9,
WORD IMAND < A : RESIDENT <-- (RESIDENT).AND.(SCRATCH)
XWOR%9: VAL 0
WORD ERROR < B
IF NMPROC-NMTW,XWOR%9,,XWOR%9
WORD FILTRE < C : SCRATCH <-- (RESIDENT DE NIVEAU N)
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < C
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
WORD ERROR < C
XWOR%9: VAL 0
WORD DISP < D : RESIDENT <-- IMAGE SGN
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < E
XWOR%9: VAL 0
IF NMPROC-NMTX,,XWOR%9,
WORD IMEOR < E : RESIDENT <-- (RESIDENT).EOR.(SCRATCH)
XWOR%9: VAL 0
WORD GOGE < F : FIN
WORD ERROR < G
WORD ERROR < H
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < I
XWOR%9: VAL 0
IF NMPROC-NMTX,,XWOR%9,
WORD IMINV < I : RESIDENT <-- .NOT.(RESIDENT)
XWOR%9: VAL 0
WORD ERROR < J
IF NMPROC-NMTW,XWOR%9,,XWOR%9
WORD ERROR < K
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < K
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
WORD INFK < K : ENTREE CTTE TRANSFORMATION
XWOR%9: VAL 0
WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE
IF NMPROC-NMTW,XWOR%9,,XWOR%9
WORD MASK < M : RECUPERATION/GENERATION DU MASQUE
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < M
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
WORD ERROR < M
XWOR%9: VAL 0
WORD NAME < N : NOMME L'IMAGE RESIDENTE
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD ERROR < O
WORD ERROR < P
XWOR%9: VAL 0
IF NMPROC-NMTX,,XWOR%9,
WORD IMOR < O : RESIDENT <-- (RESIDENT).OR.(SCRATCH)
WORD IMPERM < P : (RESIDENT) <--> (SCRATCH)
XWOR%9: VAL 0
IF NMPROC-NMTW,XWOR%9,,XWOR%9
WORD MOYEN < Q : FILTRAGE DES HAUTES FREQUENCES
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD MOYEN < Q : SCRATCH <-- MOYENNE SPIRALE(RESIDENT)
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
WORD ERROR < Q
XWOR%9: VAL 0
WORD FOND < R : INITIALISATION DU FOND PAR MOT
WORD IMSAV < S : SCRATCH <-- (RESIDENT)
WORD TRANS < T : SCRATCH <-- M(I,J)(RESIDENT)
WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE
WORD ERROR < V
WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI
WORD GORGX < X : POSITIONNEMENT DE 'ORGX'
WORD GORGY < Y : POSITIONNEMENT DE 'ORGY'
IF NMPROC-NMTW,XWOR%9,,XWOR%9
WORD ERROR < Z
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
WORD PROJE < Z : CHOIX DU MODE DE PROJECTION
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
WORD PROJE < Z : CHOIX DU MODE DE PROJECTION
XWOR%9: VAL 0
REPZ: VAL $-KOM-1 < DERNIERE COMMANDE.
PAGE
PROG
<
<
< E D I T I O N D ' U N M E S S A G E :
<
<
< ARGUMENT :
< A=ADRESSE MOT DU MESSAGE, DONT LE
< PREMIER OCTET EST LA LONGUEUR.
<
<
PRINT: EQU $
PSR A,X,C
LR A,C
ADR A,A
ADRI 1,A < CALCUL DE L'ADRESSE OCTET DU MESSAGE.
STA DEMOUT+1
LBY 0,C < ACCES A LA LONGUEUR...
STA DEMOUT+2
LAD DEMOUT
SVC 0 < ENVOI DU MESSAGE...
PLR A,X,C
RSR
PAGE
<
<
< E N T R E E D E Q U E L Q U E C H O S E :
<
<
< ARGUMENT :
< A=ADRESSE DE LA DEMANDE.
<
<
IF MODE-VISU,XWOR%7,,XWOR%7
ENTER: EQU $
PSR X
SVC 0 < ENVOI DE LA DEMANDE...
PLR X
RSR
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
ENTER: EQU $
PSR A,X,Y,W
LR A,W < W=ADRESSE DE LA DEMANDE :
LRM A
WORD '0101
CP 0,W < EST-CE BIEN UNE ENTREE AVEC ECHO
< SUR LA VISU UTILISATEUR ???
JE ENTER1 < OUI...
QUIT 1 < NON, ???!???!
ENTER1: EQU $
LA 1,W < A=ADRESSE OCTET DU BUFFER,
LYI 0 < Y=INDEX DU BUFFER,
SLRS NOCMO=0 < CONVERSION EN UNE ADRESSE MOT,
ADCR Y < Y=INDEX INITIAL DU BUFFER COURANT.
SBT 0 < MISE EN PLACE DU BIT INDEX,
STA ABUFC < ET GENERATION DU RELAI VERS LE BUFFER.
LX 2,W < X=NOMBRE D'OCTETS MAX A DEPLACER...
ENTER2: EQU $
PSR X
LA IEG < A=INDEX COURANT DE L'ITEM1,
CP NCP < ET VALIDATION ???
JL ENTER3 < OK...
BR AALTM < NON, ON FAIT COMME SI UN ALT-MODE
< ETAIT ARRIVE...
ENTER3: EQU $
IC IEG < PROGRESSION DE L'INDEX DE L'ITEM1.
LR A,X < X=INDEX D'ACCES A L'ITEM1,
LBY &AI1 < A=CARACTERE COURANT DE L'ITEM1,
CPI " " < EST-CE L'ELEMENT NEUTRE ???
JNE ENTER6 < NON...
PLR X < OUI,
LR X,A
CP 2,W < EST-ON EN TETE DU MESSAGE ???
JE ENTER2 < OUI, ON IGNORE LE 'SPACE'...
PSR X < NON, ON LE CONSERVE...
LAI " " < RESTAURATION DE 'A'...
ENTER6: EQU $
CPI ";" < EST-CE LA FIN DE MESSAGE ???
JNE ENTER4 < NON,
LAI '04 < OUI, ON LE REMPLACE PAR 'EOT'...
ENTER4: EQU $
LR Y,X
STBY &ABUFC < ET RANGEMENT DANS LE BUFFER...
ADRI 1,Y < PROGRESSION DE L'INDEX BUFFER.
PLR X
CPI '04 < EST-CE UNE FIN DE MESSAGE ???
JE ENTER5 < OUI, ON ARRETE LA...
JDX ENTER2 < NON, ON CONTINUE...
ENTER5: EQU $
PLR A,X,Y,W
RSR
XWOR%7: VAL 0
PAGE
<
<
< E N T R E E 1 C A R A C T E R E :
<
<
IN: EQU $
LAD DEMIN
BSR AENTER
LBY &AREP < A=CARACTERE ATTENDU.
RSR
<
<
< E N T R E E 4 C H I F F R E S :
<
<
IHEX: EQU $
LAD DEMHEX
BSR AENTER
BSR AHEX < A=VALEUR ATTENDUE, SI OK...
RSR
PAGE
<
<
< C O N V E R S I O N H E X A --> B I N A I R E :
<
<
< ARGUMENT :
< LE BUFFER 'REP'.
<
<
< RESULTAT :
< B=0 : (A)=VALEUR BINAIRE,
< B#0 : ERREUR DE SYNTAXE HEXA-DECIMALE.
< LES INDICATEURS POSITIONNES SUR (B).
<
<
HEX: EQU $
BASE10: VAL 10
BASE16: VAL 16
PSR X,Y
LYI NBRHEX
LXI 0 < INDEX DU BUFFER DE REPONSE.
LBI 0 < CLEAR LE REGISTRE B.
HEX1: EQU $
LBY &AREPX < A=CARACTERE COURANT DU BUFFER.
ADRI -"0",A
JAL HEX4 < ERREUR : CARACTERE NON RECONNU.
CPI BASE10 < EST-CE UN CHIFFRE ???
JL HEX2 < OUI , C'EST UN CHIFFRE.
ADRI -"A"+"9"+1,A < NON.
CPI BASE10 < VALIDATION.
JL HEX4 < ERREUR : CARACTERE NON RECONNU.
CPI BASE16 < VALIDATION.
JGE HEX4 < ERREUR : CARACTERE NON RECONNU.
HEX2: EQU $
SCRS NBITMO/NBRHEX < MISE DES 4 BITS EN TETE DE A.
SCLD NBITMO/NBRHEX < ET CONCATENATION A B.
ADRI 1,X < PROGRESSION DE L'INDEX.
CPR X,Y < EST-CE FINI ???
JNE HEX1 < NON , ON CONTINUE.
LR B,A < A=VALEUR BINAIRE DE (REP).
LBI 0 < B=0 : RETOUR OK.
HEX3: EQU $
PLR X,Y
CPZR B < POSITIONNEMENT DES INDICATEURS.
RSR
<
< RETOURS EN ERREUR :
<
HEX4: EQU $
LR B,A < A=VALEUR COURANTE...
LBI 1 < B#0.
JMP HEX3 < VERS LA SORTIE ...
PAGE
<
<
< E N V O I D ' U N E C A R T E A U C C I :
<
<
< ARGUMENT :
< A=ADRESSE MOT DE LA CARTE.
<
<
CCI: EQU $
ADR A,A < CONVERSION EN UNE ADRESSE OCTET.
STA DEMCC+1
LAD DEMCC
SVC 0 < ET ENVOI DE LA CARTE...
RSR
PAGE
<
<
< A C C E S A U C C I :
<
<
GOCCI: EQU $
QUIT 1 < ACCES AU CCI INTERACTIF...
BR ALOOP
PAGE
<
<
< M O D U L E S D ' A C C E S A U S G N :
<
<
< FONCTION :
< PERMETTENT L'ACCES AU SGN
< POUR LES IMAGES SUIVANT :
< N : NOMME L'IMAGE RESIDENTE,
< JUSQU'A UNE COMMANDE 'N'
< SUIVANTE,
< D : AFFICHE L'IMAGE PRECEDEMMENT
< NOMMEE PAR 'N'.
< + : CREE L'IMAGE PRECEDEMMENT
< NOMMEE PAR 'N',
< - : DETRUIT L'IMAGE PRECEDEMMENT
< NOMMEE PAR 'N'.
<
<
NAME: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMNOM-ZERO
BSR APRINT
XWOR%7: VAL 0
LAD NOMIN
BSR AENTER < ENTREE DU NOM COURANT,
LAI EOT
STBY &AEOT < ET ON FORCE A PRIORI UN 'EOT'...
BR ALOOP < ET C'EST TOUT...
<
< SOUS-PROGRAMME GENERAL D'ACCES AU SGN :
< (LORS DES 'LNS' ET 'LON', IL REGARDE
< SI LA LONGUEUR DE L'IMAGE VAUT EXACTE-
< MENT LIMAG*NCOOL*NOCMO ; SI NON, ELLE
< REITERE L'OPERATION AVEC UN DELTA
< NOM-VALEUR DE -1 CORRESPONDANT A UNE
< ANCIENNE VERSION DU PROGRAMME)
<
GOSGN: EQU $ < RESPONSABLE DE TOUS LES ACCES SGN...
STBY SGN < MISE EN PLACE DU 'NVP' ARGUMENT,
LAI LNOM*NOCMO
STA SGN+3 < A PRIORI...
LAD SGN
SVC 0 < ET ENVOI DE LA DEMANDE...
LBY SGN
CPI SGNDLN
JE GOSGN1 < CAS D'UN DELETE...
CPI SGNSTN
JE GOSGN1 < CAS D'UN STORE...
ACTD 3 < CAS D'UN LOAD : B=LONGUEUR DE L'IMAGE,
LRM A
WORD LIMAG*NCOOL*NOCMO
CPR A,B < S'AGIT-IL D'UNE ANCIENNE OU D'UNE
< NOUVELLE IMAGE ???
JE GOSGN1 < NOUVELLE : DELTA=LNOM*NOCMO...
LAI -1 < ANCIENNE :
STA SGN+3 < IL FAUT LA RECUPERER AVEC DELTA=-1...
LAD SGN
SVC 0 < ON REITERE LE LOAD...
GOSGN1: EQU $
CPZR X < TEST DES CONDITIONS DE RETOUR...
RSR
<
< MODULES SPECIFIQUES :
<
DISP: EQU $ < COMMANDE 'D' :
LAI SGNLON < ON COMMENCE PAR L'ACN DU DEMANDEUR,
BSR AGOSGN
JE DISP1 < OK, IL EXISTE...
LAI SGNLNS < NON, ON TENTE SOUS :SYS...
BSR AGOSGN
JE DISP1 < OK...
DISP2: EQU $
BR AERROR < TRAITEMENT DES ERREURS...
DISP1: EQU $
BR ALOOP < VERS LA BOUCLE SI OK...
DELETE: EQU $ < COMMANDE '-' :
LAI SGNDLN
DELET1: EQU $
BSR AGOSGN
JE DISP1 < OK...
JMP DISP2 < ERREUR...
STORE: EQU $ < COMMANDE '+' :
LAI SGNSTN
JMP DELET1
PAGE
<
<
< A C C E S A U N P O I N T R E S I D E N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME RECONSTITUE
< LE NIVEAU ASSOCIE A 3 BITS
< PARALLELES.
<
<
< ARGUMENT :
< XR,YR = COORDONNEES DU POINT,
<
<
< RESULTAT :
< A = NIVEAU DE GRIS DU POINT, SOIT R+V*2+B*4.
<
<
SPAPR: EQU $
PSR B,X,Y
LX XR < X=ABSCISSE,
LY YR < Y=ORDONNEE.
LR X,A < A=COORDONNEE X,
LBI 0
XWOR%1: VAL NBITMO=0
SCLD NBITMO-XWOR%1 < B=NUMERO DE MOT DANS LA LIGNE,
SLRS NBITMO-XWOR%1 < A=NUMERO DE BIT DANS LE MOT,
LXI NBITMO-BIT
SBR A,X < X=DECALAGE D'ACCES AU BIT COURANT.
XR Y,B < Y=NUMERO DU MOT DANS LA LIGNE,
SLLD NMOTL=0
IF NBITMO-NMOTL,,XWOR%,
IF ATTENTION : LA CONCATENATION QUI SUIT EST COMPLETEMENT
IF STUPIDE !!!
XWOR%: VAL 0
ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME.
XR Y,X
LA &AIMAGB < ACCES A LA TRAME BLEU,
PSR A
LA &AIMAGV < ACCES A LA TRAME BLEUE,
PSR A
LA &AIMAGR < ACCES A LA TRAME ROUGE.
XR X,Y
SLRS 0,X
SLRD BIT < RECUPERATION D'UN BIT ROUGE,
PLR A
SLRS 0,X
SLRD BIT < RECUPERATION D'UN BIT VERT,
PLR A
SLRS 0,X
ANDI BIT < RECUPERATION D'UN BIT BLEU.
SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT (X,Y).
PLR B,X,Y
RSR
PAGE
<
<
< A C C E S A U N P O I N T S C R A T C H :
<
<
< FONCTION :
< CE SOUS-PROGRAMME RECONSTITUE
< LE NIVEAU ASSOCIE A 3 BITS
< PARALLELES.
<
<
< ARGUMENTS :
< XS,YS = COORDONNEES DU POINT SCRATCH,
<
<
< RESULTAT :
< A=NIVEAU DE GRIS DU POINT SCRATCH.
<
<
SPAPS: EQU $
PSR B,X,Y
LX XS < X=ABSCISSE,
LY YS < Y=ORDONNEE.
LR X,A
LBI 0
XWOR%1: VAL NBITMO=0
SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT DANS LA LIGNE,
SLRS NBITMO-XWOR%1
LXI NBITMO-BIT
SBR A,X < X=DECALAGE D'ACCES AUX BITS,
PSR X
XR Y,B
SLLD NMOTL=0+NBITMO
ORR Y,A < A=NUMERO DU MOT DANS LA TRAME.
LRM B,X,Y
WORD MCDAR
WORD 1
WORD LIMAG < Y=LONGUEUR EN MOTS D'UNE TRAME.
RCDA
< ACCES A UN MOT ROUGE,
LRM B,X
WORD MCDAV
WORD 1
ADR Y,A
RCDA
< ACCES A UN MOT VERT,
LRM B,X
WORD MCDAB
WORD 1
ADR Y,A
RCDA
< ACCES A UN MOT BLEU.
PLR X < RESTAURATION DU DECALAGE,
LA MCDAR
SLRS 0,X
SLRD BIT < RECUPERATION D'UN BIT ROUGE,
LA MCDAV
SLRS 0,X
SLRD BIT < RECUPERATION D'UN BIT VERT,
LA MCDAB
SLRS 0,X
ANDI BIT < RECUPERATION D'UN BIT BLEU,
SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT.
PLR B,X,Y
RSR
PAGE
<
<
< R A N G E M E N T D ' U N P O I N T R E S I D E N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME RANGE LE
< NIVEAU D'UN POINT SUR 3 BITS
< PARALLELES.
<
<
< ARGUMENTS :
< XR,YR = COORDONNEES DU POINT,
< A = SON NIVEAU DE GRIS.
<
<
SPSPR: EQU $
PSR A,B,X,Y
LX XR < X=ABSCISSE,
LY YR < Y=ORDONNEE.
PSR A
LR X,A
LBI 0
XWOR%1: VAL NBITMO=0
SCLD NBITMO-XWOR%1
SLRS NBITMO-XWOR%1
LR A,X < X=NUMERO DE BITS.
XR Y,B
SLLD NMOTL=0
ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME.
PLR A < A=NIVEAU DE GRIS DU POINT.
SLRD NCOOL < ET MISE DANS B...
XR X,Y
LA &AIMAGR < ACCES A UN MOT ROUGE,
STA SAVER
LA &AIMAGV < ACCES A UN MOT VERT,
STA SAVEV
LA &AIMAGB < ACCES A UN MOT BLEU.
XR X,Y
SCLS 0,X
SLLD BIT < RECUPERATION DU BIT BLEU,
SCRS BIT,X
STA SAVEB
LA SAVEV
SCLS 0,X
SLLD BIT < RECUPERATION DU BIT VERT,
SCRS BIT,X
STA SAVEV
LA SAVER
SCLS 0,X
SLLD BIT < RECUPERATION DU BIT ROUGE,
SCRS BIT,X
XR X,Y
STA &AIMAGR < RANGEMENT DU MOT ROUGE,
LA SAVEV
STA &AIMAGV < RANGEMENT DU MOT VERT,
LA SAVEB
STA &AIMAGB < RANGEMENT DU MOT BLEU.
PLR A,B,X,Y
RSR
PAGE
<
<
< R A N G E M E N T D ' U N P O I N T S C R A T C H :
<
<
< FONCTION :
< CE SOUS-PROGRAMME RANGE LE
< NIVEAU D'UN POINT SUR 3 BITS
< PARALLELES EN SCRATCH.
<
<
< AGUMENTS :
< XS,YS = COORDONNEES DU POINT,
< A = SON NIVEAU DE GRIS.
<
<
SPSPS: EQU $
PSR A,B,X,Y
PSR A < SAUVEGARDE DU NIVEAU,
LX XS < DU POINT
LY YS < SCRATCH (XS,YS).
LR X,A
LBI 0
XWOR%1: VAL NBITMO=0
SCLD NBITMO-XWOR%1
SLRS NBITMO-XWOR%1
LXI NBITMO-BIT
SBR A,X < X=AMPLITUDE DU DECALAGE...
PSR X
XR Y,B
SLLD NMOTL=0+NBITMO
ORR Y,A < A=ADRESSE DU MOT ROUGE CONTENANT
< (XS,YS) DANS LA 'CDA'...
LRM B,X,Y
WORD MCDAR
WORD 1
WORD LIMAG < Y=POUR PASSER D'UNE COULEUR A L'AUTRE.
RCDA
< ACCES AU MOT ROUGE,
LRM B,X
WORD MCDAV
WORD 1
ADR Y,A
RCDA
< ACCES AU MOT VERT,
LRM B,X
WORD MCDAB
WORD 1
ADR Y,A
RCDA
< ACCES AU MOT BLEU.
PLR X < X=AMPLITUDE DU DECALAGE,
STA WORK1 < SAUVEGARDE DE LA DERNIERE ADRESSE...
PLR A < A=NIVEAU DE GRIS DE (XS,YS).
SLRD NCOOL < ET CADRAGE DANS 'B'...
LA MCDAB < MSE A JOUR DU BLEU,
SCRS 0,X
SLRS BIT
SLLD BIT
SCLS 0,X
STA MCDAB
LA MCDAV < MISE A JOUR DU VERT,
SCRS 0,X
SLRS BIT
SLLD BIT
SCLS 0,X
STA MCDAV
LA MCDAR < MISE A JOUR DU ROUGE.
SCRS 0,X
SLRS BIT
SLLD BIT
SCLS 0,X
STA MCDAR
LA WORK1 < A=ADRESSE EN 'CDA' DU BLEU...
LRM B,X
WORD MCDAB
WORD 1
WCDA
< MISE A JOUR DU BLEU,
LRM B,X
WORD MCDAV
WORD 1
SBR Y,A
WCDA
< MISE A JOUR DU VERT,
LRM B,X
WORD MCDAR
WORD 1
SBR Y,A
WCDA
< MISE A JOUR DU ROUGE.
PLR A,B,X,Y
RSR
PAGE
IF NMPROC-NMTX,,XWOR%9,
<
<
< ' O R ' E N T R E 2 P O I N T S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE L'OPE-
< RATION SUIVANTE :
< POINT RESIDENT <-- (POINT RESIDENT).OR.(POINT SCRATCH),
< SACHANT QUE SUIVANT LA LOGIQUE FLOUE :
< X.OR.Y=MAX(X,Y).
<
<
< ARGUMENTS :
< (XR,YR),(XS,YS) = COORDONEES DES 2 POINTS.
<
<
SPOR: EQU $
PSR A,B
BSR ASPGPR
LR A,B < B=NIVEAU DU POINT RESIDENT,
BSR ASPGPS < A=NIVEAU DU POINT SCRATCH.
CPR A,B < RECHERCHE DU MAX...
JGE SPOR1 < B>=A : LE RESIDENT EST LE MAX,
BSR ASPRPR < B<A : LE SCRATCH EST LE MAX, IL REMPLACE
< LE POINT RESIDENT.
SPOR1: EQU $
PLR A,B
RSR
PAGE
<
<
< ' A N D ' E N T R E 2 P O I N T S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE L'OPERATION
< SUIVANTE :
< POINT RESIDENT <-- (POINT RESIDENT).AND.(POINT SCRATCH),
< SACHANT QUE SUIVANT LA LOGIQUE FLOUE :
< X.AND.Y=MIN(X,Y).
<
<
< ARGUMENTS :
< (XR,YR),(XS,YS) = COORDONNEES DES 2 POINTS.
<
<
SPAND: EQU $
PSR A,B
BSR ASPGPR
LR A,B < B=NIVEAU DU POINT RESIDENT,
BSR ASPGPS < A=NIVEAU DU POINT SCRATCH.
CPR A,B < RECHERCHE DU MINIMUM :
JLE SPAND1 < B<=A : LE RESIDENT EST DEJA LE MINIMUM,
BSR ASPRPR < B>A : LE SCRATCH EST LE MINIMUM, IL
< REMPLACE LE POINT RESIDENT...
SPAND1: EQU $
PLR A,B
RSR
PAGE
<
<
< P E R M U T A T I O N D E 2 P O I N T S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE
< L'OPERATIO SUIVANTE :
< (POINT RESIDENT) <--> (POINT SCRATCH).
<
<
< AGUMENTS :
< (XR,YR) ET (XS,YS).
<
<
SPPER: EQU $
PSR A,B
BSR ASPGPR
LR A,B < B=NIVEAU RESIDENT,
BSR ASPGPS < A=NIVEA SCRATCH,
XR A,B < ET ON PERMUTE...
BSR ASPRPS < ET ON MET A JOUR LE SCRATCH,
LR B,A
BSR ASPRPR < ET LE RESIDENT...
PLR A,B
RSR
PAGE
<
<
< I N V E R S I O N D ' U N P O I N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME CALCULE L'INVERSE
< D'UN POINT SUIVANT LA FORMULE :
< .NOT.X=MAX-X, OU MAX REPRESENTE LE
< NIVEAU MAXIMUM RECONNU.
<
<
< ARGUMENTS :
< XR,YR = COORDONNEES DU POINT.
<
<
SPINV: EQU $
PSR A
BSR ASPGPR < A=NIVEAU DU POINT,
ADRI -NIVMAX,A
NGR A,A
BSR ASPRPR < QUE L'ON INVERSE...
PLR A
RSR
XWOR%9: VAL 0
PAGE
<
<
< S O U S - P R O G R A M M E D E T R A N S F O R M A T I O N :
<
<
< FONCTION :
< 1 - POUR 'TW' :
< ETANT DONNEES LES COORDONNEES DU
< POINT RESIDENT, LE SOUS-PROGRAME
< CALCULE LE POINT (XS,YS) TEL QUE :
< (XS,YS)=TRANS(XR,YR), OU 'TRANS' EST
< DEFINI PAR LA MATRICE M(I,J) ; LE
< CENTRE DE LA TRANSFORMATION EST
< DEFINI PAR (TRX,TRY).
< 2 - POUR 'TX' :
< FAIT DE MEME, MAIS EN 3 DIMENSIONS
< PROJETE SUR LES 2 DIMENSIONS DE
< L'ECRAN :
< (XS,YS)=PROJ(M(I,J)(XR,YR,0)) SI SENS=0,
< (XR,YR)=PROJ(M(I,J)(XR,YR,0)) SI SENS=1.
< 3 - POUR 'TY' :
< IL PROCEDE A UNE TRANSFORMATION
< CONFORME DU PLAN DE L'IMAGE CHOISIE
< PARMI LES 3 SUIVANTES :
< Z=K/Z,
< Z=K*Z*Z,
< MAPPING SUR UNE SPHERE,
< DANS LE SENS SCRATCH --> RESIDENT SI
< SENS=1, ET DANS LE SENS INVERSE SI SENS=0.
<
<
SPTR: EQU $
PSR A,B,X,Y
IF NMPROC-NMTW,XWOR%9,,XWOR%9
LA XR
SB TRX < CENTRAGE...
FLT
FMP M11
FST FWORK
LA YR
SB TRY < CENTRAGE...
FLT
FMP M12
FAD FWORK
BSR AROND
AD TRX
JAL SPTR1 < HORS-ECRAN...
CPI NPOLM1
JG SPTR1 < HORS-ECRAN...
STA XS < XS=M11*(XR-TRX)+M12*(YR-TRY)+TRX.
LA XR
SB TRX < CENTRAGE...
FLT
FMP M21
FST FWORK
LA YR
SB TRY < CENTRAGE...
FLT
FMP M22
FAD FWORK
BSR AROND
AD TRY
JAL SPTR1 < HORS-ECRAN...
CPI NLIGM1
JG SPTR1 < HORS-ECRAN...
STA YS < YS=M21*(XR-TRX)+M22*(YR-TRY)+TRY.
BSR ASPGPR < A=NIVEAU(XR,YR),
BSR ASPRPS < NIVEAU(XS,YS) <-- (A)...
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
LA XR
SB TRX
FLT
FST FXR < X 3D CENTRE...
FMP M11
FST FXS
LA YR
SB TRY
FLT
FST FYR < Y 3D CENTRE...
FMP M12
FAD FXS
FST FXS
LAI 0 < LA COORDONNEE 'Z' EST NULLE,
SB TRZ
FLT
FST FZR < Z 3D CENTRE...
FMP M13
FAD FXS
FST FXS
LA TRX
FLT
FAD FXS
FST FXS < FXS=M11*(XR-TRX)+M12*(YR-TRY)
< +M13*(ZR-TRZ)+TRX.
FLD FXR
FMP M21
FST FYS
FLD FYR
FMP M22
FAD FYS
FST FYS
FLD FZR
FMP M23
FAD FYS
FST FYS
LA TRY
FLT
FAD FYS
FST FYS < FYS=M21*(XR-TRX)+M22*(YR-TRY)
< +M23*(ZR-TRZ)+TRY.
FLD FXR
FMP M31
FST FZS
FLD FYR
FMP M32
FAD FZS
FST FZS
FLD FZR
FMP M33
FAD FZS
FST FZS
LA TRZ
FLT
FAD FZS
FST FZS < FZS=M31*(XR-TRX)+M32*(YR-TRY)
< +M33*(ZR-TRZ)+TRZ.
CPZ IPROJ < MODE DE PROJECTION ???
JE SPTRX1 < PAR COST,SINT...
<
< PROJECTION PERSPECTIVE :
<
FDV PZ
FSB F1
FNEG
FST FWORK < 1-(FZS/PZ)
FLD FXS
FDV FWORK < FXS/(1-(FZS/PZ))
JMP SPTRX2
<
< PROJECTION PAR COST,SINT :
<
SPTRX1: EQU $
FMP COST
FAD FXS < PROJ(X)=FXS+FZS*COST.
SPTRX2: EQU $
BSR AROND < CONVERSION ENTIERE...
JAL SPTR1 < HORS-ECRAN...
CPI NPOLM1
JG SPTR1 < HORS-ECRAN...
STA XS < XS=PROJ(X).
CPZ IPROJ < MODE DE PROJECTION ???
JE SPTRX3 < PAR COST,SINT...
<
< PROJECTION PERSPECTIVE :
<
FLD FYS
FDV FWORK < FYS/(1-(FZS/PZ))
JMP SPTRX4
<
< PAR SINT,COST :
<
SPTRX3: EQU $
FLD FZS
FMP SINT
FAD FYS < PROJ(Y)=FYS+FZS*SINT.
SPTRX4: EQU $
BSR AROND < CONVERSION ENTIERE...
JAL SPTR1 < HORS-ECRAN...
CPI NLIGM1
JG SPTR1 < HORS-ECRAN...
STA YS < YS=PROJ(Y).
CPZ SENS < ???
JNE SPTR2 < SCRATCH --> RESIDENT...
BSR ASPGPR < A=NIVEAU(XR,YR),
BSR ASPRPS < NIVEAU(XS,YS) <-- (A)...
JMP SPTR1
SPTR2: EQU $ < RESIDENT <-- SCRATCH.
BSR ASPGPS < A=NIVEAU(XS,YS),
BSR ASPRPR < NIVEAU(XR,YR) <-- (A).
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
LA XR
SB TRX
FLT
FST FXS < XS.
FMP FXS
FST FRS < XS*XS.
LA YR
SB TRY
FLT
FST FYS < YS.
FMP FYS
LX XTRAN < X=NUMERO DE LA TRANSFORMATION,
BR &ATRAN < A LAQUELLE ON SE BRANCHE...
<
< TRANSFORMATION CONFORME Z=K*Z*Z :
<
TRANS2: EQU $
FSB FRS < XS*XS-YS*YS.
FMP FK
BSR AROND
AD TRX
STA XS < XS=FK*(XS*XS-YS*YS).
FLD FYS
FMP FXS
FDV F05
FMP FK
BSR AROND
AD TRY
STA YS < YS=2*FK*XS*YS.
JMP SPTR4
<
< TRANSFORMATION CONFORME Z=K/Z :
<
TRANS1: EQU $
FAD FRS
FST FRS < XS*XS+YS*YS.
FLD FXS
FMP FK
FDV FRS
BSR AROND
AD TRX
STA XS < XS=FK*XS/(XS*XS+YS*YS).
FLD FYS
FMP FK
FNEG
FDV FRS
BSR AROND
AD TRY
STA YS < YS=-FK*YS/(XS*XS+YS*YS).
JMP SPTR4
<
< MAPPING DE (XR,YR) SUR UNE SURFACE DONT LES
< COORDONNEES CURVILIGNES SONT (XS,YS) :
<
TRANS3: EQU $
CPZ SENS
JE SPTR10 < RESIDENT --> SCRATCH : ON DIFFERE
< LE TEST SUR LE POINT DESTINATION DONT
< ON NE CONNAIT PAS ENCORE LES COORDONNEES
< XS,YS...
BSR ASPGPR < SCRATCH --> RESIDENT : LE POINT DESTINA-
< TION EST LE POINT XR,YR :
JANE SPTR1 < IL N'EST PAS NOIR, ON NE VA PAS Y
< TOUCHER...
SPTR10: EQU $
FLD FXS
FDV RADIAX
FST FXS < XS=2*PI*XR/255.
FLD FYS
FDV RADIAY
FST FYS < YS=PI*YR/255.
BSR ACOS
FMP RAYON
FST FRS < RS=RAYON*COS(PI*YR/255).
FLD FXS
BSR ACOS
FMP FRS
PSR A,B < SAVE X=FRS*COS(2*PI*XR/255).
FLD FXS
BSR ASIN
FMP FRS
PSR A,B < SAVE Y=FRS*SIN(2*PI*XR/255).
FLD FYS
BSR ASIN
FMP RAYON
FST FRS < SAVE Z=RAYON*SIN(PI*YR/255) DANS FRS.
PLR A,B
FST FYS < COORDONNEE 'Y' 3D,
PLR A,B
FST FXS < COORDONNEE 'X' 3D,
FLD FRS < COORDONNEE 'Z' 3D...
CPZ IPROJ < MODE DE PROJECTION ???
JE SPTRX1 < PAR COST,SINT...
<
< PROJECTION PERSPECTIVE :
<
FDV PZ
FSB F1
FNEG
FST FWORK < 1-(FZS/PZ)
FLD FXS
FDV FWORK < FXS/(1-(FZS/PZ))
JMP SPTRX2
<
< PROJECTION PAR COST,SINT :
<
SPTRX1: EQU $
FMP COST < ET ON PROJETTE...
FAD FXS
SPTRX2: EQU $
BSR AROND
AD TRX
STA XS < XS=X+Z*COST.
CPZ IPROJ < MODE DE PROJECTION ???
JE SPTRX3 < PAR COST,SINT...
<
< PROJECTION PERSPECTIVE :
<
FLD FYS
FDV FWORK < FYS/(1-(FZS/PZ))
JMP SPTRX4
<
< PAR SINT,COST :
<
SPTRX3: EQU $
FLD FRS
FMP SINT
FAD FYS
SPTRX4: EQU $
BSR AROND
AD TRY
STA YS < YS=Y+Z*SINT.
<
< TEST DES HORS-ECRAN :
<
SPTR4: EQU $
LA XS
CPZ MODX < EST-ON SUR UN X-TORE ???
JE SPTT3 < OUI...
JAL SPTR1 < NON, ET XS EST OVERSCREEN...
CPI NPOLM1
JG SPTR1 < DE MEME...
JMP SPTT4 < OK, XS EST DANS L'ECRAN...
SPTT3: EQU $ < CAS OU L'ON EST SUR UN X-TORE :
ANDI NPOLM1
STA XS < CALCUL MODULO DE XS...
SPTT4: EQU $
LA YS
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPTT6 < OUI...
JAL SPTR1 < NON, ET YS EST OVERSCREEN...
CPI NLIGM1
JG SPTR1 < DE MEME...
JMP SPTT7
SPTT6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE :
ANDI NLIGM1
STA YS < CALCUL MODULO DE YS...
SPTT7: EQU $
CPZ SENS < ???
JNE SPTR2 < SCRATCH --> RESIDENT.
LA XTRAN
CPI XTR3 < EST-CE LE MAPPING ???
JNE SPTR11 < NON...
BSR ASPGPS < OUI : A=NIVEAU(XS,YS) :
JANE SPTR1 < LE POINT (XS,YS) EST DEJA OCCUPE,
< ON LE LAISSE INTACT...
SPTR11: EQU $
BSR ASPGPR < A=NIVEAU(XR,YR),
BSR ASPRPS < NIVEAU(XS,YS) <-- (A)...
JMP SPTR1
SPTR2: EQU $
BSR ASPGPS < A=NIVEAU(XS,YS),
BSR ASPRPR < NIVEAU(XR,YR) <-- (A)...
XWOR%9: VAL 0
SPTR1: EQU $
PLR A,B,X,Y
RSR
<
<
< A R R O N D I F L O T T A N T :
<
<
ROND: EQU $
JAL ROND1 < NOMBRE NEGATIF...
FAD F05 < NOMBRE POSITIF...
JMP ROND2
ROND1: EQU $
FSB F05
ROND2: EQU $
FIX
RSR
PAGE
IF NMPROC-NMTY,XWOR%9,,XWOR%9
<
<
< C A L C U L S I N U S E T C O S I N U S :
<
<
< ARGUMENT :
< A,B = ANGLE EN RADIANS,
<
<
< RESULTAT :
< A,B = LIGNE TRIGONOMETRIQUE DEMANDEE.
<
<
COS: EQU $ < ENTRY 'COSINUS' :
FSB PISUR2 < A,B = TETA-PI/2,
FNEG < A,B = PI/2-TETA.
SIN: EQU $ < ENTRY 'SINUS' :
FST ZZZ061 < SAVE TEMPORAIRE DE L'ANGLE.
STZ ZZZ063
JAGE ZZZ072
FNEG
FST ZZZ061
IC ZZZ063
ZZZ072: EQU $
FDV DEUXPI
FIX
FLT
FMP DEUXPI
FSB ZZZ061
FNEG
FCAM PI3141
JL ZZZ073
FSB PI3141
IC ZZZ063
ZZZ073: EQU $
FCAM PISUR2
JL ZZZ074
FSB PI3141
FNEG
ZZZ074: EQU $
FDV PISUR2
FST ZZZ061
FMP ZZZ061
FST ZZZ062
FMP ZZZ071
FAD ZZZ070
FMP ZZZ062
FAD ZZZ069
FMP ZZZ062
FAD ZZZ068
FMP ZZZ062
FAD ZZZ067
FMP ZZZ061
DC ZZZ063
JNE ZZZ075
FNEG
ZZZ075: EQU $
RSR
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTX,XWOR%,,XWOR%
<
<
< M O Y E N N A G E S U R U N E S P I R A L E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME CALCULE UNE SPIRALE
< CENTREE SUR LE POINT (XR,YR) COURANT,
< ET CALCULE LA MOYENNE DES NIVEAUX QU'IL
< Y RENCONTRE, ET QU'IL AFFECTE ENSUITE
< AU POINT (XS,YS) COURANT.
<
<
< ARGUMENT :
< (XR,YR) = POINT RESIDENT COURANT.
<
<
SPMOY: EQU $
PSR A,B,X,Y
CPZ IFLOU < FLOU OU ELIMINATION POINTS NOIRS ???
JE SPMOY6 < FLOU...
BSR ASPGPR < ELIMINATION DE CERTAINS POINTS :
LR A,X
LA LNIV
TBT 0,X < LE NIVEAU DE (XR,YR) EST-IL A PRENDRE
< EN COMPTE ???
JNC SPMOY7 < (XR,YR) N'EST PAS A PRENDRE EN COMPTE...
SPMOY6: EQU $
STZ XSMAX < REINITIALISATION DU MAX A PRIORI...
LA XR
LB YR
PSR A,B < SAUVEGARDE DU POINT (XR,YR).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
LA PASQ
STA DELTAX < DELTAX <-- +1,
STZ DELTAY < DELTAY <-- 0.
LAI 1
STA LB0 < INITIALISATION DE LA LONGUEUR DU
< PREMIER BRAS DE LA SPIRALE.
SPMOY8: EQU $
<
< PARCOURS D'UN BRAS :
<
SPMOY1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2: EQU $
IC NP < COMPTAGE DES POINTS TRAITES :
LA NP
CP NPM < FINI ???
JG SPMOY3 < OUI...
LA XR < NON :
JAL SPMOY4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPMOY4 < HORS-ECRAN...
LA YR
JAL SPMOY4 < HORS-ECRAN...
CPI NLIGM1
JG SPMOY4 < HORS-ECRAN...
BSR ASPGPR < A=NIVEAU(XR,YR),
CP XSMAX < EST-CE LE MAX RENCONTRE ???
JLE SPMOYA < NON..
STA XSMAX < OUI, ON LE GARDE...
LA NP
STA NPMAX < ET ON MEMORISE LE 'NP' ASSOCIE...
LA XSMAX < ET RESTAURE (A)...
SPMOYA: EQU $
AD CUMUL < ET
STA CUMUL < CUMULE...
SPMOY4: EQU $
LA XR
AD DELTAX < CHANGEMENT DE
STA XR
LA YR
AD DELTAY < POINT COURANT (XR,YR).
STA YR
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3: EQU $
PLR A,B
STA XR < RESTAURATION
STB YR < DE (XR,YR),
STA XS < ET GENERATION
STB YS < DE (XS,YS)...
LA XSMAX < A=NIVEAU MAX RENCONTRE,
CPZ IPOND < DOIT-ON PONDERER ???
JE SPMOYB < NON, ON PREND 'XSMAX'...
LA NPM
SB NPMAX
MP XSMAX < OUI, ON VA PRENDRE :
DV NPM < (XSMAX*(NPM-NPMAX))/NPM...
SPMOYB: EQU $
CPZ ISMAX < MAIS EST-CE BIEN UNE RECHERCHE DU MAX ?
JNE SPMOY9 < ET OUI...
LAI 0 < ET NON...
LB CUMUL
DV NPM < A=NIVEAU MOYEN DE LA SPIRALE,
SPMOY9: EQU $
<
< TRAMAGE PAR CALCUL DE LA
< PROPORTION DE POINTS BLANCS
< PAR RAPPORT AUX POINTS NOIRS
< EN FONCTION DES COULEURS
< PRESENTES :
<
CPZ ITRAM < DOIT-ON TRAMER ???
JE ERDN1 < NON...
LR A,X
LBY &ATAUX
JAE ERDN7 < NUL, RIEN A FAIRE ==> NOIR...
LR A,X < INITIALISATION DU MULTIPLICATEUR
< COURANT PAR UNE FONCTION DU NIVEAU DE
< GRIS DU POINT COURANT...
LA LNIV
XWOR%8: VAL 0
DO NIVMAX+1
XWOR%8: VAL XWOR%8>BIT?BIT
ANDI XWOR%8 < (A)=VALEUR INITIALE DE 'DRDN' :
JANE ERDN6 < OK...
LAI NIVMAX*NIVMAX < NUL, ON FORCE LE CARRE DU NIVEAU
< DE BLANC (VOIR LE FORMAT DE 'TAUX')...
ERDN6: EQU $
STA DRDN < INITIALISATION DE 'DRDN'...
ERDN5: EQU $
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
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 $
EOR XS < PRISE EN COMPTE DE LA COORDONNEE 'X'...
EOR RDN9
ADRI -XKRDN2,A
SCRS XKRDN1
EOR YS < PRISE EN COMPTE DE LA COORDONNEE 'Y'...
STA RDN
SARD NBITMO
DV DRDN
LAI NIVMAX < (A)=BLANC A PRIORI...
CPZR B < DOIT ON TRACER (LE NOMBRE ALEATOIRE
< COURANT EST-IL DIVISIBLE PAR 'DRDN') ???
JE ERDN4 < OUI ==> BLANC...
JDX ERDN5 < NON, ATTENDONS ENCORE UN PEU...
ERDN7: EQU $
LAI 0 < (A)=NOIR LORSQU'ON NE TRACE PAS...
ERDN4: EQU $
ERDN3: EQU $
ERDN1: EQU $
<
< MARQUAGE DU POINT (XS,YS) :
<
BSR ASPRPS < QUE L'ON AFFECTE A (XS,YS).
SPMOY7: EQU $
PLR A,B,X,Y
RSR
XWOR%: VAL 0
PAGE
IF NMPROC-NMTW,XWOR%9,,XWOR%9
<
<
< E X T R A C T I O N D ' U N N I V E A U D O N N E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME TESTE LE NIVEAU
< DU POINT (XR,YR) ; SI CE NIVEAU EGALE
< 'NIVEAU', ALORS, IL L'AFFECTE AU
< POINT (XS,YS), SINON, IL LUI AFFECTE
< LE NIVEAU 0...
<
<
SPFIL: EQU $
PSR A
BSR ASPGPR < A=NIVEAU(XR,YR),
CP NIVEAU
JE SPFIL1 < NIVEAU(XR,YR)=NIVEAU...
LAI 0 < NIVEAU(XR,YR)#NIVEAU, ON AFFECTE 0...
SPFIL1: EQU $
BSR ASPRPS < NIVEAU(XS,YS) <-- (A)...
PLR A
RSR
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTW,XWOR%9,,XWOR%9
<
<
< F I L T R A G E D E S H A U T E S F R E Q U E N C E S :
<
<
< FONCTION :
< CE MODULE DECOUPE L'IMAGE EN MAILLES
< ELEMENTAIRES DE DIMENSION (DX,DY), ET AU
< NOMBRE DE (NDX,NDY) ; DANS CHACUNE D'ENTRE
< ELLES DE L'IMAGE RESIDENTE, ON CALCULE
< LE NIVEAU DE GRIS MOYEN, QUE L'ON AFFECTE
< ENSUITE EN RESIDENT A TOUS LES POINTS
< DE LA MAILLE COURANTE.
<
<
MOYEN: EQU $
MOYEN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMDX-ZERO
BSR APRINT < "DX=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'DX' :
JNE MOYEN1 < ERREUR...
JALE MOYEN1 < ERREUR...
STA EX
LRM A,B
WORD 0;NMOTL*NBITMO
DV EX
JAE MOYEN1 < ERREUR...
CPZR B
JNE MOYEN1 < 'DX' EST INCOMPATIBLE AVEC LA
< DIMENSION HORIZONTALE DE L'ECRAN.
STA NDX < NOMBRE HORIZONTAL DE MAILLES.
MOYEN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMDY-ZERO
BSR APRINT < "DY=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'DY' :
JNE MOYEN2 < ERREUR...
JALE MOYEN2 < ERREUR...
STA EY
LRM A,B
WORD 0;NLIG
DV EY
JAE MOYEN2 < ERREUR...
CPZR B
JNE MOYEN2 < LA DIMENSION VERTICALE EST INCOMPATIBLE
< AVEC L'ECRAN...
STA NDY < NOMBRE VERTICAL DE MAILLES...
LA EX
MP EY
CPZR B
JLE MOYEN1 < TROP GRAND, DONC NEGATIF...
STB NPOINT < NOMBRE DE POINTS PAR MAILLE...
<
< BOUCLE DE FILTRAGE :
<
LYI 0
LB NDY
STB XNDY
MOYEN3: EQU $
LXI 0
LB NDX
STB XNDX
MOYEN4: EQU $
STZ CUMUL < SOMMATION DES NIVEAUX DE GRIS.
LB EY
STB XDY < DIMENSION VERTICALE DE LA MAILLE...
STY YR < YR=COORDONNEE Y COURANTE.
MOYEN5: EQU $
LB EX
STB XDX < DIMENSION HORIZONTALE DE LA MAILLE...
STX XR < XR=COORDONNEE X COURANTE.
MOYEN6: EQU $
BSR ASPGPR < A=NIVEAU DU POINT (XR,YR),
AD CUMUL < ET
STA CUMUL < CUMUL DANS LA MAILLE...
IC XR < DEPLACEMENT HORIZONTAL DANS
DC XDX < LA MAILLE COURANTE.
JG MOYEN6
IC YR < DEPLACEMENT VERTICAL DANS
DC XDY < LA MAILLE COURANTE.
JG MOYEN5
LAI 0
LB CUMUL
DV NPOINT < A=NIVEAU DE GRIS MOYEN DE LA MAILLE
< COURANTE.
LB EY
STB XDY
STY YR < YR=COORDONNEE Y COURANTE.
MOYEN7: EQU $
LB EX
STB XDX
STX XR < XR=COORDONNEE X COURANTE.
MOYEN8: EQU $
BSR ASPRPR < MISE EN PLACE DU NIVEAU MOYEN...
IC XR < BALAYAGE HORIZONTAL DANS
DC XDX < LA MAILLE COURANTE.
JG MOYEN8
IC YR < BALAYAGE VERTICAL DANS
DC XDY < LA MAILLE COURANTE.
JG MOYEN7
LA EX
ADR A,X < BALAYAGE HORIZONTAL DANS
DC XNDX < L'IMAGE RESIDENTE.
JG MOYEN4
LA EY
ADR A,Y < BALAYAGE VERTICAL DANS
DC XNDY < L'IMAGE RESIDENTE.
JG MOYEN3
BR ALOOP < ET ENFIN, VERS L'INTERROGATION...
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTX,,XWOR%9,
<
<
< ' E O R ' E N T R E 2 P O I N T S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE L'OPERATION
< SUIVANTE :
< POINT RESIDENT <-- (POINT RESIDENT).EOR.(POINT SCRATCH),
< SACHANT QUE :
< X.EOR.Y=(X.AND.(.NOT.Y)).OR.((.NOT.X).AND.Y)
<
<
< ARGUMENTS :
< (XR,YR),(XS,YS) = COORDONNEES DES 2 POINTS.
<
<
SPEOR: EQU $
PSR A,B,W
BSR ASPGPR
LR A,W < A=W=NIVEAU DU POINT RESIDENT, SOIT 'NR'.
PSR W
BSR ASPGPS
LR A,B < B=NIVEAU DU POINT SCRATCH, SOIT 'NS'.
ADRI -NIVMAX,A
NGR A,A < A=.NOT.NS
ADRI -NIVMAX,W
NGR W,W < W=.NOT.NR
CPR B,W < CALCUL DE NS.AND.(.NOT.NR)
JGE SPEOR1 < W>=B : C'EST NS...
LR W,B < W<B : C'EST .NOT.NR...
SPEOR1: EQU $ < B=NS.AND.(.NOT.NR)
PLR W < W=NR
CPR A,W < CALCUL DE (.NOT.NS).AND.NR
JGE SPEOR2 < W>=A : C'EST NR...
LR W,A < W<A : C'EST .NOT.NS...
SPEOR2: EQU $ < A=(.NOT.NS).AND.NR
CPR A,B < CALCUL DE :
< ((.NOT.NS).AND.NR).OR.(NS.AND.(.NOT.NR))
JLE SPEOR3 < B<=A, A EST LE MAXIMUM,
LR B,A < B>A : B EST LE MAXIMUM...
SPEOR3: EQU $ < A CONTIENT LE 'EOR'...
BSR ASPRPR < QUE L'ON MET EN RESIDENT...
PLR A,B,W
RSR
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTW,XWOR%9,,XWOR%9
<
<
< R E C U P E R A T I O N / G E N E R A T I O N
< D U M A S Q U E D ' I M A G E :
<
<
< FONCTION :
< CE MODULE PERMET DE GENERER (COMMANDE
< ">") OU DE RECUPERER (COMMANDE
< "<") LE MASQUE COURANT D'IMAGE
< DE, OU A PARTIR DE L'UNE DES 3 COMPOSANTES
< 'R', 'V' ET 'B' DE L'IMAGE SCRATCH.
<
<
MASK: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMC-ZERO
BSR APRINT < MESSAGE "STACK?"...
XWOR%7: VAL 0
BSR AIN < A=REPONSE "R"/"V"/"B"...
LBI TVPR-1 < B=NUMERO DU STACK DEMANDE...
CPI "R"
JE MASK1 < "R"...
LBI TVPV-1
CPI "V"
JE MASK1 < "V"...
LBI TVPB-1
CPI "B"
JE MASK1 < "B"...
MASK2: EQU $
BR AERROR < TRAITEMENT DES ERREURS...
MASK1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMS-ZERO
BSR APRINT < MESSAGE "SENS?"...
XWOR%7: VAL 0
LAD DEMIN
BSR AENTER
SLLD LIMAG=0 < B=ADRESSE DANS LA 'CDA' DU STACK DEMANDE.
LRM X,Y
WORD LIMAG < X=NOMBRE DE MOTS A DEPLACER,
WORD AMASK < Y=ADRESSE DU MASQUE DANS LA 'CDA'.
LBY &AREP < A=REPONSE DE "SENS?"...
CPI ">"
JE MASK3 < ">" : GENERATION...
CPI "<"
JNE MASK2 < ERREUR...
XR B,Y < "<" : RECUPERATION, ON PERMUTE EMETTEUR
< ET RECPTEUR...
MASK3: EQU $
STB AEMETT < EMETTEUR EN CDA,
STY ARECEP < RECEPTEUR EN CDA.
LRM B
WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT...
MASK4: EQU $
PSR X
LA AEMETT
LXI 1
RCDA
LA ARECEP
LXI 1
WCDA
PLR X
IC AEMETT < PROGRESSION DE L'EMETTEUR,
IC ARECEP < AINSI QUE DU RECEPTEUR...
JDX MASK4 < AU MOT SUIVANT DU MASQUE...
BR ALOOP < ET C'EST TOUT...
XWOR%9: VAL 0
PAGE
<
<
< O P E R A T I O N I N T E R - I M A G E S :
<
<
< FONCTION :
< CETTE VERSION PROVISOIRE REALISE
< L'OPERATION .OP. DE LA FACON
< SUIVANTE :
< RESIDENT <-- (RESIDENT).OP.(SCRATCH)
< CETTE OPERATION N'ETANT EFFECTUEE
< QUE POUR LES BITS A 1 DU MASQUE...
<
<
SPOP: EQU $
PSR A,B,X,Y
LY ORGY
STY YS < ORDONNEE SCRATCH.
LYI 0 < Y=ORDONNEE.
STY YR
SPOP1: EQU $
LXI 0
STX XR < X=ABSCISSE.
LX ORGX
STX XS
SPOP2: EQU $
LX XS
LY YS
PSR X,Y < SAUVEGARDE DE 'XS' ET 'YS'...
LA XS
CPZ MODX < EST-ON SUR UN X-TORE ???
JE SPOP3 < OUI...
JAL SPOP5 < NON, ET XS EST OVERSCREEN...
CPI NPOLM1
JG SPOP5 < DE MEME...
JMP SPOP4 < OK, XS EST DANS L'ECRAN...
SPOP3: EQU $ < CAS OU L'ON EST SUR UN X-TORE :
ANDI NPOLM1
STA XS < CALCUL MODULO DE XS...
SPOP4: EQU $
LA YS
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPOP6 < OUI...
JAL SPOP5 < NON, ET YS EST OVERSCREEN...
CPI NLIGM1
JG SPOP5 < DE MEME...
JMP SPOP7
SPOP6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE :
ANDI NLIGM1
STA YS < CALCUL MODULO DE YS...
SPOP7: EQU $
CPZ IMASKO
JE SPOP8 < LE MASQUE EST OFF...
PSR X,Y
LX XR < X=COORDONNEE RESIDENTE,
LY YR < AINSI QUE Y...
LR X,A
LBI 0
XWOR%1: VAL NBITMO=0
SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT SUR LA LIGNE,
SLRS NBITMO-XWOR%1 < A=NUMERO DU BIT DANS LE MOT,
LR A,X < X=NUMERO DU BIT DANS LE MOT,
XR Y,B
SLLD NMOTL=0+NBITMO
ORR A,Y < Y=NUMERO DU MOT DANS LE MASQUE,
LRM A
WORD AMASK
ADR Y,A < A=ADRESSE DU MOT DANS LA 'CDA'.
PSR X
LRM B,X
WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT,
WORD 1 < X=NOMBRE DE MOTS A DEPLACER.
RCDA
PLR X
LA MCDAM < ACCES AU MASQUE,
TBT 0,X < ALORS ???
PLR X,Y
JNC SPOP5 < LE MOT (X,Y) EST MASQUE...
SPOP8: EQU $
BSR ASP < EXECUTION DE L'OPERATION VARIABLE .OP.
< SUR LE COUPLE DE POINTS (X,Y).
SPOP5: EQU $
PLR X,Y < RESTAURATION DE XS ET YS...
STX XS
STY YS
IC XS < PROGRESSION DE XS,
IC XR < ET DE XR,
LA XR
CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ???
JLE SPOP2 < NON... BALAYAGE HORIZONTAL...
IC YS < OUI, PROGRESSION DE YS,
IC YR < ET DE YR...
LA YR
CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ???
JLE SPOP1 < NON, BALAYAGE VERTICAL...
PLR A,B,X,Y
RSR
PAGE
<
<
< E N T R E E D E M ( I , J ) :
<
<
< ARGUMENT :
< A = ADRESSE DU MESSAGE POUR 'TW',
< NUMERO DE L'ELEMENT POUR 'TX'.
<
<
< RESULTAT :
< A,B = COEFFICIENT EN FLOTTANT.
<
<
PTRANS: EQU $
PSR X,Y
IF NMPROC-NMTW,XWOR%9,,XWOR%9
STA XWORK < SAUVEGARDE DE L'ADRESSE DU MESSAGE.
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
LR A,X < SAVE LE NUMERO DE L'ELEMENT,
SLRD NBRHEX
ORI "0" < CONVERSION ASCI DU NUMERO,
SLLS NBRHEX
XWOR%: VAL -NBRHEX
ORI "0">XWOR% < SUITE...
SLLD NBRHEX
IF MODE-VISU,XWOR%7,,XWOR%7
STA MATN < NUMERO EN ASCI DE L'ELEMENT...
XWOR%7: VAL 0
LR X,A
ADRI -'11,A
SLRD NBRHEX
LR A,X
ADR A,A
ADR A,X < X=TRIPLE DU PREMIER CHIFFRE,
LAI 0
SLLD NBRHEX
ADR A,X < X=CONVERSION LINEAIRE DU NUMERO DE
< L'ELEMENT : 11 --> 0, 12 --> 1,...
ADR X,X < ET ON DOUBLE CAR IL S'AGIT D'UNE
< MATRICE FLOTTANTE...
XWOR%9: VAL 0
PTRAN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
IF NMPROC-NMTW,XWOR%9,,XWOR%9
LA XWORK < A PRIORI, A=ADRESSE MESSAGE,
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
LAD MAT < A=ADRESSE DU MESSAGE MIJ=.
XWOR%9: VAL 0
BSR APRINT < QUE L'ON EDITE...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX :
JNE PTRAN1 < ERREUR...
LR A,Y < Y=NUMERATEUR...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSLAS-ZERO
BSR APRINT < EDITION DE "/"...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX :
JNE PTRAN1 < ERREUR...
FLT
FST FWORK < SAUVEGARDE DU DENOMINATEUR...
LR Y,A
FLT < CALCUL DU NUMERATEUR,
FDV FWORK < (A,B)=NUMERATEUR/DENOMINATEUR.
IF NMPROC-NMTX,XWOR%9,,XWOR%9
FST &AM < QUE L'ON RANGE DANS LA MATRICE...
XWOR%9: VAL 0
PLR X,Y
RSR
PAGE
IF NMPROC-NMTX,XWOR%9,,XWOR%9
<
<
< E N T R E E D E C X C Y O U C Z :
<
<
< ARGUMENT :
< A=ADRESSE DU MESSAGE.
<
<
< RESULTAT :
< A=COEFFICIENT.
<
<
PIC: EQU $
STA XWORK < SAUVEGARDE DE L'ADRESSE DU MESSAGE,
PIC1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LA XWORK < A=ADRESSE DU MESSAGE...
BSR APRINT < QUE L'ON EDITE...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX :
JNE PIC1 < ERREUR DE SYNTAXE...
RSR
XWOR%9: VAL 0
PAGE
<
<
< E N T R E E D E L A M A T R I C E :
<
<
DTRANS: EQU $
IF NMPROC-NMTW,XWOR%9,,XWOR%9
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMAT11-ZERO
XWOR%7: VAL 0
BSR APTRAN
FST M11
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMAT12-ZERO
XWOR%7: VAL 0
BSR APTRAN
FST M12
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMAT21-ZERO
XWOR%7: VAL 0
BSR APTRAN
FST M21
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMAT22-ZERO
XWOR%7: VAL 0
BSR APTRAN
FST M22
DTRAN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRX-ZERO
BSR APRINT < EDITION DE "CX=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'CX' :
JNE DTRAN1 < ERREUR...
STA TRX
DTRAN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRY-ZERO
BSR APRINT < EDITION DE "CY=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'CY' :
JNE DTRAN2 < ERREUR...
STA TRY
XWOR%9: VAL 0
IF NMPROC-NMTX,XWOR%9,,XWOR%9
LAI '11
BSR APTRAN < ENTREE DE M11,
LAI '12
BSR APTRAN < ENTREE DE M12,
LAI '13
BSR APTRAN < ENTREE DE M13,
LAI '21
BSR APTRAN < ENTREE DE M21,
LAI '22
BSR APTRAN < ENTREE DE M22,
LAI '23
BSR APTRAN < ENTREE DE M23,
LAI '31
BSR APTRAN < ENTREE DE M31,
LAI '32
BSR APTRAN < ENTREE DE M32,
LAI '33
BSR APTRAN < ENTREE DE M33.
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRX-ZERO
XWOR%7: VAL 0
BSR APIC
STA TRX < ENTREE DE TRX,
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRY-ZERO
XWOR%7: VAL 0
BSR APIC
STA TRY < ENTREE DE TRY,
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRZ-ZERO
XWOR%7: VAL 0
BSR APIC
STA TRZ < ENTREE DE TRZ.
DTRAN3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSENS-ZERO
BSR APRINT < "S R".
XWOR%7: VAL 0
STZ SENS < SENS=0, : S <-- R A PRIORI...
BSR AIN < ENTREE DU SENS :
CPI "<"
JE DTRAN4 < S <-- R.
IC SENS < SENS=1 : S --> R...
CPI ">"
JNE DTRAN3 < ERREUR...
DTRAN4: EQU $
XWOR%9: VAL 0
IF NMPROC-NMTY,XWOR%9,,XWOR%9
DTRAN5: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRAN-ZERO
BSR APRINT < "1/Z Z2 ?"
XWOR%7: VAL 0
STZ XTRAN < XTRAN=0 : 1/Z A PRIORI...
BSR AIN < ENTREE DE LA TRANSFORMATION :
CPI "1"
JE DTRAN6 < 1/Z...
IC XTRAN < XTRAN=1 : Z*Z...
CPI "2"
JE DTRAN6 < Z*Z...
IC XTRAN < XTRAN=2 : MAPPING...
CPI "3"
JNE DTRAN5 < ERREUR...
DTRAN6: EQU $
DTRAN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRX-ZERO
BSR APRINT < EDITION DE "CX=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'CX' :
JNE DTRAN1 < ERREUR...
STA TRX
DTRAN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRY-ZERO
BSR APRINT < EDITION DE "CY=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'CY' :
JNE DTRAN2 < ERREUR...
STA TRY
DTRAN3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSENS-ZERO
BSR APRINT < "S R".
XWOR%7: VAL 0
STZ SENS < SENS=0 : S <-- R A PRIORI...
BSR AIN < ENTREE DU SENS :
CPI "<"
JE DTRAN4 < S <-- R.
IC SENS < SENS=1 : S --> R...
CPI ">"
JNE DTRAN3 < ERREUR...
DTRAN4: EQU $
XWOR%9: VAL 0
BR ALOOP < EASY ??!?!?!
PAGE
IF NMPROC-NMTX,XWOR%9,,XWOR%9
<
<
< C H O I X D U M O D E D E P R O J E C T I O N :
<
<
PROJE: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMODM-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DU MODE :
< 0 : PAR COST,SINT ;
< 1 : EN PERSPECTIVE.
ADRI -"0",A
JAL PROJE < ERREUR...
CPI 1
JG PROJE < ERREUR...
STA IPROJ < RANGEMENT DU MODE...
JAE PROJE2 < PAR COST, SINT...
PROJE1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPROJ-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'PZ' :
JNE PROJE1 < ERREUR...
FLT
FST PZ < PZ=POSITION DE L'ECRAN.
PROJE2: EQU $
BR ALOOP < ET C'EST TOUT...
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTY,XWOR%9,,XWOR%9
<
<
< C H O I X D U M O D E D E P R O J E C T I O N :
<
<
PROJE: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMODM-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DU MODE :
< 0 : PAR COST,SINT ;
< 1 : EN PERSPECTIVE.
ADRI -"0",A
JAL PROJE < ERREUR...
CPI 1
JG PROJE < ERREUR...
STA IPROJ < RANGEMENT DU MODE...
JAE PROJE2 < PAR COST, SINT...
PROJE1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPROJ-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'PZ' :
JNE PROJE1 < ERREUR...
FLT
FST PZ < PZ=POSITION DE L'ECRAN.
PROJE2: EQU $
BR ALOOP < ET C'EST TOUT...
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTW,XWOR%9,,XWOR%9
<
<
< F I L T R A G E :
<
<
< FONCTION :
< SELECTIONNE DANS L'IMAGE RESIDENTE
< LES POINTS DE NIVEAU DONNE POUR LES
< METTRE EN IMAGE SCRATCH...
<
<
FILTRE: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMNIVO-ZERO
BSR APRINT < EDITION DE "NIVEAU="...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU NIVEAU :
JNE FILTRE < ERREUR...
JAL FILTRE < NIVEAU NE PEUT ETRE NEGATIF...
CPI NIVMAX < NE PEUT EXCEDER 'NIVMAX'...
JG FILTRE < TROP GRAND...
FILTR1: EQU $
STA NIVEAU
LB ASPFIL
JMP IM1
XWOR%9: VAL 0
PAGE
IF NMPROC-NMTX,XWOR%,,XWOR%
<
<
< M O Y E N N A G E S U R U N E S P I R A L E :
<
<
< FONCTION :
< CETTE COMMANDE CENTRE SUR CHAQUE
< POINT (XR,YR) UNE SPIRALE DONT LE
< NOMBRE DE POINTS EST FIXE PAR L'UTI-
< LISATEUR, CALCULE LA MOYENNE DES NIVEAUX
< DES POINTS DE CETTE SPIRALE, ET
< L'AFFECTE AU POINT (XS,YS) CONFONDU
< AVEC LE POINT (XR,YR).
<
<
MOYEN: EQU $
STZ ISMAX < A PRIORI, PAS DE RECHERCHE DU MAX...
STZ IPOND < PAS DE PONDERATION A PRIORI...
STZ ITRAM < PAS DE TRAMAGE A PRIORI...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPOIN-ZERO
BSR APRINT < EDITION DE "#POINTS="...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU NOMBRE DE POINTS :
JNE MOYEN < ERREUR...
JALE MOYEN < ERREUR...
STA NPM < NPM=NOMBRE DE POINTS PAR SPIRALE (>1).
MOYEN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPASQ-ZERO
BSR APRINT < "PAS="
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU PAS :
JNE MOYEN1 < ERREUR, ON REDEMANDE...
JALE MOYEN1 < ERREUR...
IF NLIGM1-NPOLM1,,XWOR%9,
IF CE QUI SUIT EST IDIOT !!!
XWOR%9: VAL 0
CPI NLIGM1?NPOLM1 < VALIDATION ???
JG MOYEN1 < ERREUR...
STA PASQ < OK, LE PAS EST BON...
MOYEN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMFLOU-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DE FLOU OU PAS :
STZ IFLOU < FLOU A PRIORI...
CPI "O"
JE MOYEN3 < IFLOU=0 : FLOU...
IC IFLOU < IFLOU=1 : ELIMINATION POINTS NOIRS...
CPI "N"
JNE MOYEN2 < ERREUR...
IC NPM < ON COMPTE LE POINT CENTRAL EN PLUS
< LORS DU MAX...
MOYEN4: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMAX-ZERO
BSR APRINT < "MAX?"...
XWOR%7: VAL 0
BSR AIN < ENTREE DE MAX OU PAS :
CPI "N"
JE MOYEN5 < "N" : ISMAX=0...
CPI "O"
JNE MOYEN4 < ??!?!
IC ISMAX < "O" : ISMAX=1...
MOYEN5: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMNIVO-ZERO
BSR APRINT < "NIVEAUX="...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DES NIVEAUX AUTORISES :
JNE MOYEN5 < ERROR...
STA LNIV < ET SAUVEGARDE A PRIORI...
CPZ ISMAX < MAX OU MOYENNE ???
JE MOYEN3 < MOYENNE, DONC PAS DE PONDERATION...
MOYEN6: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPOND-ZERO
BSR APRINT < "PONDERATION?"...
XWOR%7: VAL 0
BSR AIN < PONDERATION OU PAS :
CPI "N"
JE MOYEN8 < NON : IPOND=0...
CPI "O"
JNE MOYEN6 < ERREUR...
IC IPOND < OUI : IPOND=1...
MOYEN8: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRAM-ZERO
BSR APRINT < "TRAME?"...
XWOR%7: VAL 0
BSR AIN < ENTREE DE LA REPONSE :
CPI "N"
JE MOYEN3 < NON, PAS DE TRAMAGE...
CPI "O"
JNE MOYEN8 < ??!??!?!!
IC ITRAM < OUI, TRAMAGE...
MOYEN3: EQU $
LB ASPMOY < B=ADRESSE DU S/P DE MOYENNAGE...
JMP IM1
XWOR%: VAL 0
PAGE
<
<
< E N T R E E D U F O N D :
<
<
< FONCTION :
< LA COMMANDE "R" PERMET DE RENTRER
< 16 VALEURS HEXADECIMALES COMPRISES
< ENTRE 0 ET 7 (NIVMAX) POUR INITIALISER
< LE FOND AVEC DES BARRES VERTICALES...
<
<
FOND: EQU $
IF NMPROC-NMTW,XWOR%,,XWOR%
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMFOND-ZERO
BSR APRINT < EDITION DE "FOND=",
XWOR%7: VAL 0
LAD DEMFON
BSR AENTER < ENTREE DU FOND,
LXI 0 < ET VALIDATION...
FOND1: EQU $
LBY &ABUFIN < ACCES AU CARACTERE COURANT,
ADRI -"0",A < TRANSLATION,
JAL FOND2 < ERREUR...
CPI NIVMAX < VALIDATION,
JG FOND2 < ERREUR...
STBY &ABUFIN < GENERATION DE LA TABLE D'INITIALISATION.
ADRI 1,X
LR X,A
CPI NBITMO
JL FOND1 < ENCORE...
STZ XWORK < INITIALISATION DE L'INDEX DE 'BUFIN'...
LB ASFOND < B=ADRESSE DU MODULE DE TRAITEMENT,
JMP IM2 < VERS LE TRAITEMENT...
FOND2: EQU $
XWOR%: VAL 0
BR AERROR
IF NMPROC-NMTW,XWOR%,,XWOR%
<
<
< I N I T I A L I S A T I O N D ' U N P O I N T :
<
<
SFOND: EQU $
PSR A,X
LA XWORK
LR A,X < X=INDEX CIRCULAIRE DE 'BUFIN',
ADRI 1,A
ANDI NBITMO-1 < ET PROGRESSION MODULO 'NBITMO'...
STA XWORK
LBY &ABUFIN < A=NIVEAU COURANT,
BSR ASPRPR < QUE L'ON MET AU POINT RESIDENT
< COURANT...
PLR A,X
RSR
XWOR%: VAL 0
PAGE
<
<
< O P E R A T I O N S I N T E R - I M A G E S :
<
<
IMSAV: EQU $ < ENVOI DU RESIDENT EN SCRATCH.
LBY &API
CPI "P" < EST-ON SUR LA 'CDA-PRIVE' ???
JE IMSAV1 < OUI, ON PEUT Y ALLER...
BR AERROR < NON, SUR LA 'CDA-IMAGE', ET ALORS
< GARE AUX MOVE DE PLUS D'UN MOT !!!
IMSAV1: EQU $
BSR ASPSCD
BR ALOOP
IF NMPROC-NMTX,,XWOR%9,
IMPERM: EQU $ < PERMUTATION RESIDENT-SCRATCH.
LB ASPPER
JMP IM1
XWOR%9: VAL 0
IMUP: EQU $ < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK.
LB ASPACD
JMP IM2
IMLOAD: EQU $ < RAPPEL DU SCRATCH EN RESIDENT SANS MASK.
LBY &API
CPI "P" < EST-ON SUR LA 'CDA-PRIVE' ???
JE IMLOAE < OUI, ON PEUT Y ALLER...
BR AERROR < NON, SUR LA 'CDA-IMAGE', ET ALORS
< GARE AUX MOVE DE PLUS D'UN MOT !!!
IMLOAE: EQU $
BSR ASPBCD
BR ALOOP
IF NMPROC-NMTX,,XWOR%9,
IMINV: EQU $ < INVERSION VIDEO DE L'IMAGE.
LB ASPINV
JMP IM2
XWOR%9: VAL 0
TRANS: EQU $ < APPLICATION DE M(I,J).
LB ASPTR
JMP IM2
IF NMPROC-NMTX,,XWOR%9,
IMAND: EQU $ < .AND.
LB ASPAND
JMP IM1
IMEOR: EQU $ < .EOR.
LB ASPEOR
JMP IM1
IMOR: EQU $ < .OR.
LB ASPOR
JMP IM1
XWOR%9: VAL 0
IM1: EQU $
IM2: EQU $
STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
BSR ASPOP
BR ALOOP
PAGE
IF NMPROC-NMTY,XWOR%9,,XWOR%9
<
<
< E N T R E E D E L A C O N S T A N T E D E
< T R A N S F O R M A T I O N C O N F O R M E :
<
<
INFK: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMK-ZERO
BSR APRINT < "K="
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU NUMERATEUR DE 'K' :
JNE GORGX2 < ERREUR...
LR A,Y < Y=SAVE LE NUMERATEUR...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSLAS-ZERO
BSR APRINT < "/"
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU DENOMINATEUR DE 'K' :
JNE GORGX2 < ERREUR...
JAE GORGX2 < NE PEUT ETRE NUL...
FLT
FST FK
LR Y,A
FLT
FDV FK < NUMERATEUR/DENOMINATEUR...
FDV F05 < ON MULTIPLIE PAR 2...
FST FK < OK...
BR ALOOP
XWOR%9: VAL 0
PAGE
<
<
< E N T R E E D E ' O R G X ' E T ' O R G Y ' :
<
<
GORGX: EQU $
STZ MODX < TORE A PRIORI...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMORGX-ZERO
BSR APRINT < EDITION DU MESSAGE.
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'ORGX' :
JE GORGX1 < OK...
GORGX2: EQU $
BR AERROR < ET NON...
GORGX1: EQU $
NGR A,A
STA ORGX
GORGX3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTORE-ZERO
BSR APRINT < "TORE?"
XWOR%7: VAL 0
BSR AIN < ENTREE DE X-TORE :
CPI "O"
JE GORGX4 < TORE...
CPI "N"
JNE GORGX3 < ERREUR...
IC MODX < CE N'EST PAS LE MODE TORE...
GORGX4: EQU $
BR ALOOP < OK...
GORGY: EQU $
STZ MODY < MODE TORE A PRIORI...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMORGY-ZERO
BSR APRINT < EDITION DU MESSAGE...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 'ORGY' :
JNE GORGX2 < ERREUR...
NGR A,A
STA ORGY
GORGY3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTORE-ZERO
BSR APRINT < "TORE?"
XWOR%7: VAL 0
BSR AIN < ENTREE DE Y-TORE :
CPI "O"
JE GORGY4 < TORE...
CPI "N"
JNE GORGY3 < ERREUR...
IC MODY < CE N'EST PAS LE MODE TORE...
GORGY4: EQU $
BR ALOOP < OK...
PAGE
<
<
< M O U V E M E N T S R E S I D E N T <--> T V :
<
<
MOV0: EQU $ < RESIDENT R+V+B --> TV.
LAD DEMTVR
SVC 0 < ROUGE,
LAD DEMTVV
SVC 0 < VERT,
MOV3: EQU $ < RESIDENT B --> TV.
LAD DEMTVB
SVC 0 < BLEU.
BR ALOOP
MOV1: EQU $ < RESIDENT R --> TV.
LAD DEMTVR
SVC 0 < ROUGE.
BR ALOOP
MOV2: EQU $ < RESIDENT V --> TV.
LAD DEMTVV
SVC 0 < VERT.
BR ALOOP
PMOV5: EQU $ < TV R --> RESIDENT.
LA DEMTVR+3
LR A,B
ORI TVIN < MISE EN ENTREE,
STA DEMTVR+3
LAD DEMTVR
SVC 0 < ENTREE DU ROUGE,
STB DEMTVR+3 < ET RESTAURATION...
RSR
PMOV6: EQU $ < TV V --> RESIDENT.
LA DEMTVV+3
LR A,B
ORI TVIN
STA DEMTVV+3
LAD DEMTVV
SVC 0 < ENTREE DU VERT...
STB DEMTVV+3
RSR
PMOV7: EQU $ < TV B --> RESIDENT.
LA DEMTVB+3
LR A,B
ORI TVIN
STA DEMTVB+3
LAD DEMTVB
SVC 0 < ENTREE DU BLEU...
STB DEMTVB+3
RSR
MOV4: EQU $ < TV R+V+B --> RESIDENT.
BSR APMOV5 < ROUGE,
BSR APMOV6 < VERT,
MOV7: EQU $ < TV B --> RESIDENT.
BSR APMOV7 < BLEU.
BR ALOOP
MOV5: EQU $ < TV R --> RESIDENT.
BSR APMOV5
BR ALOOP
MOV6: EQU $ < TV V --> RESIDENT.
BSR APMOV6
BR ALOOP
PAGE
<
<
< T R A N S F E R T S R E S I D E N T - S C R A T C H :
<
<
< FONCTION :
< CE MODULE ASSURE LES TRANSFERTS
< BRUTAUX ENTRE LE RESIDENT, ET LE
< SCRATCH (QUI EST EN FAIT LA 'CDA').
<
<
SPSCD: EQU $
PSR A,B,X
LRM A,B,X
WORD 0 < A=ADRESSE EN 'CDA',
WORD IMAGE < B=ADRESSE EN RESIDENT,
WORD LIMAG*NCOOL < X=NOMBRE DE MOTS A TRANSFERER.
WCDA
< TRANSFERT : RESIDENT --> SCRATCH.
PLR A,B,X
RSR
SPACD: EQU $ < TRANSFERT AVEC MASQUE...
PSR A
BSR ASPGPS < ACCES AU POINT SCRATCH COURANT,
BSR ASPRPR < ET MISE EN RESIDENT...
PLR A
RSR
SPBCD: EQU $ < TRANSFERT SANS MASQUE...
PSR A,B,X
LRM A,B,X
WORD 0 < A=ADRESSE EN 'CDA',
WORD IMAGE < B=ADRESSE EN RESIDENT,
WORD LIMAG*NCOOL < X=NOMBRE DE MOTS A TRANSFERER.
RCDA
< TRANSFERT : SCRATCH --> RESIDENT.
PLR A,B,X
RSR
PAGE
<
<
< T R A I T E M E N T D E S E R R E U R S :
<
<
ERROR: EQU $
LAI AMERR-ZERO
BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR...
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< R E T O U R A ' G E ' :
<
<
GOGE: EQU $
IF MODE-ITEM,XWOR%7,,XWOR%7
LAI BRANCH-ZERO
LR A,W < W=ADRESSE DE LA BRANCHE...
LA NSD
STA 0,W < GENERATION DU NOM DE L'OVERALY,
ACTD 4 < A='IDESC',
ORI "0" < CONVERTI EN ASCI,
STBY 2,W < QUI FAIT PARTIE DU NOM...
LAI SGNLON
STBY DEMLOD < MISE EN MODE 'LOAD SOUS ACN'...
STZ CDRET,W < RETOUR OK...
GOGE2: EQU $
LRM A,B,X
WORD SITEM1 < A=ZONE DE SAUVEGARDE,
WORD NOM < B=ZONE A RESTAURER,
WORD LNOM/NOCMO < X=NOMBRE DE MOTS A RESTAURER.
MOVE < RESTAURATION DU BOUT DE L'ITEM1...
LX NMOTS
GOGE3: EQU $
STZ &AITEM2 < RAZ DE L'ITEM2...
JDX GOGE3
XWOR%7: VAL 0
LA SAVEK
LR A,K < RESTAURATION DE 'K'...
IF MODE-VISU,XWOR%7,,XWOR%7
LAD RELMEM
SVC 0 < RETOUR A 4K MOTS...
LAI BRANCH-ZERO
LR A,W < RESTAURATION DE 'W'.
STZ MODCAL,W < REINITIALISATION DU MODE D'APPEL...
LA NGE
STA 0,W < MISE EN PLACE DU NOM DE "GE"...
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
LA IEG
STA MODCAL,W < RENVOI DE L'INDEX COURANT DE ITEM1,
XWOR%7: VAL 0
LAI AMCDA-ZERO
BSR ACCI < ENVOI DE !CDA.
GOGE1: EQU $
LAD DEMLOD
BSR AOVL < ET TENTATIVE DE CHARGEMENT...
QUIT 1 < ACCES AU CCI EN CAS D'ERREUR...
JMP GOGE1 < ET ON RETENTE...
IF MODE-ITEM,XWOR%7,,XWOR%7
<
<
< T R A I T E M E N T D E S A L T - M O D E S :
<
<
ALTM: EQU $
LAI BRANCH-ZERO
LR A,W < W=ADRESSE DE LA BRANCHE...
LA NPCALL
JANE ALTM1 < OK...
LA MODCAL,W < MODCAL EST ENCORE A SA VALEUR INITIALE.
LXI 0 < "GE" A PRIORI...
TBT 0 < "EI" OU "GE" ???
ADCR X
LA &NCALL < A=OVERLAY A APPELER...
ALTM1: EQU $
STA 0,W < DANS LE CAS D'UN ALT-MODE, ON REVIENT
< DIRECTEMENT A "GE" OU A "EI"...
LAI " " < ON RESTAURE, AU CAS OU LE ALT-MODE
STBY 2,W < APPARAITRAIT DANS 'GOGE'...
LAI SGNLNS < IDEM...
STBY DEMLOD
LAI 2
STA CDRET,W < TRANSMISSION DU ALT-MODE...
JMP GOGE2
XWOR%7: VAL 0
PAGE
<
<
< E N T R Y :
<
<
TW: EQU $
LRM C,L
WORD REP+128 < ON INITIALISE 'C' AVEC 'REP+128'
< A CAUSE DE L'OPERATEUR FLOTTANT
< QUI ECRIT DANS LE MOT (C)-128 !!!
WORD LOC+128 < L=BASE DU LOCAL...
IC KIN < COMPTAGE DES ENTREES :
IF MODE-VISU,XWOR%7,,XWOR%7
JG TW1 < CAS DES ALT-MODES...
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
JG ALTM < ABORT IMMEDIAT SUR ALT-MODE...
LA CDRET,W < A=RELAI D'ACCES A ITEM1/ITEM2...
CP AI1 < SEUL ITEM1 EST AUTORISE...
JNE ALTM < L'ITEM2 PROVOQUE UN ABORT...
LA MODCAL,W < A=INDEX INITIAL DE L'ITEM1...
LXI 0 < "GE" A PRIORI...
TBT 0 < "GE" (0) OU "EI" (1) ???
ADCR X
RBT 0
STA IEG
LA &NCALL
STA NPCALL < NOM DU PROCESSEUR A APPELER SUR LA
< RECEPTION D'UN ALT-MODE.
LRM A,B,X
WORD NOM < A=ZONE A SAUVEGARDER,
WORD SITEM1 < B=ZONE DE SAUVEGARDE,
WORD LNOM/NOCMO < X=NOMBRE DE MOTS.
MOVE < SAUVEGARDE...
XWOR%7: VAL 0
LR K,A < CAS DE LA PREMIERE,
STA SAVEK < SAUVEGARDE DE K...
IF MODE-VISU,XWOR%7,,XWOR%7
LX NMOTS < X=NOMBRE DE MOTS A RAZER,
TW2: EQU $
STZ &AITEM2 < NETTOYAGE DE ITEM1 ET ITEM2...
JDX TW2
XWOR%7: VAL 0
TW1: EQU $
LRM K
WORD STACK-1 < INITIALISATION DE K...
TW20: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMCDA-ZERO
BSR APRINT < EDITION DE "!CDA"...
XWOR%7: VAL 0
BSR AIN < ENTREE DU CHOIX ENTRE !CDAI ET !CDAP :
CPI "P" < PRIVE ???
JE TW21 < OUI, OK...
CPI "I" < IMAGE ???
JNE TW20 < NON, ERREUR...
TW21: EQU $
STBY &API < MISE EN PLACE DE "P" OU "I"...
LAI AMCDAP-ZERO
BSR ACCI < TENTATIVE DE !CDAP OU !CDAI,
JNE GOGE < ET BIEN CELA NE MARCHE PAS...
STZ IMASKO < MISE DU MASQUE OFF A PRIORI...
LAD DEMMEM
SVC 0 < PASSAGE A 16 K...
LAI '18
WORD '1E15
LR B,X < X=ORIGINE DE LA 'CDAP'/'CDAI',
LAI '19
WORD '1E15
SBR X,B
XWOR%1: VAL -4 < B=LONGUEUR UTILE DE LA 'CDAP'/'CDAI',
LRM A
WORD NCOOL+1*LIMAG>XWOR%1 < A=LONGUEUR IMAG+MASQUE NECESSAIRE.
CPR A,B < CELA SUFFIT-IL ???
JL GOGE < B<A : INSUFFISANT POUR TRAVAILLER...
IF NMPROC-NMTW,XWOR%,,XWOR%
<
< ENTREE DU MASQUE COURANT ???
<
TW3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMIMA-ZERO
BSR APRINT < EDITION DE "INIT MASK?"...
XWOR%7: VAL 0
BSR AIN < INITIALISATION DU MASQUE :
CPI "N"
JE TW4 < PAS D'INITIALISATION...
CPI "O"
JNE TW3 < ??!??!
<
< INITIALISATION SIMPLE DU MASQUE COURANT :
<
TW5: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMAH-ZERO
BSR APRINT < EDITION DE "MASK H="...
XWOR%7: VAL 0
LXI 0 < INDEX DU MASQUE HORIZONTAL,
TW6: EQU $
BSR AIHEX < ENTREE DU H-MASQUE :
JNE TW5 < MAUVAIS, ON RECOMMENCE...
STA &ABUFMH < OK, ON RANGE...
ADRI 1,X
LR X,A
CPI LBUFMH
JL TW6 < AU SUIVANT...
TW7: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMAV-ZERO
BSR APRINT < EDITION DE "MASK V="...
XWOR%7: VAL 0
LXI 0 < INDEX DU MASQUE VERTICAL,
TW8: EQU $
BSR AIHEX < ENTREE DU V-MASQUE :
JNE TW7 < MAUVAIS, ON RECOMMENCE...
STA &ABUFMV < OK, ON RANGE...
ADRI 1,X
LR X,A
CPI LBUFMV
JL TW8 < AU SUIVANT...
TW15: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMODM-ZERO
BSR APRINT < EDITION DE "MODE="...
XWOR%7: VAL 0
BSR AIN < A=REPONSE ("A", "O", "E").
LBI 3
CPI "O"
JE TW16 < .OR. : B=3...
LBI 2
CPI "A"
JE TW16 < .AND. : B=2...
CPI "E"
JNE TW15 < ?!???!
LBI 1 < .EOR. : B=1...
TW16: EQU $
STB XWORK < SAUVEGARDE DE (B)...
LYI NLIGM1
STY YR < YR=INDEX VERTICAL,
TW9: EQU $
LXI NPOLM1
STX XR < XR=INDEX HORIZONTAL.
TW10: EQU $
LYI 0
LA XR
LBI 0
XWOR%1: VAL NBITMO=0
XWOR%2: VAL NBITMO-XWOR%1
SCLD XWOR%2 < B=NUMERO DE MOT DANS LA LIGNE
SLRS XWOR%2 < A=NUMERO DE BIT DANS LE MOT.
LR B,X < X=NUMERO DE MOT DANS 'BUFMH'.
LB &ABUFMH
LR A,X < X=NUMERO DE BIT DANS LE MOT,
TBT NBITMO,X < 1 OU 0 ???
ADCR Y < ON CUMULE LE BIT BUFMH(XR).
LA YR
LBI 0
SCLD XWOR%2 < B=NUMERO DE MOT DANS LA COLONNE,
SLRS XWOR%2 < A=NUMERO DE BIT DANS LE MOT.
LR B,X < X=NUMERO DE MOT DANS 'BUFMV',
LB &ABUFMV
LR A,X < X=NUMERO DE BIT DANS LE MOT,
TBT NBITMO,X < 1 OU 0 ???
ADCR Y < ON CUMULE LE BIT BUFMV(YR).
LB XWORK < NATURE DE L'OPERATION LOGIQUE...
ANDR B,Y < FINALEMENT ON CALCULE :
< Y=BUFMH(XR).OP.BUFMV(YR), OU .OP.
< DESIGNE .OR. OU .AND. OU .EOR. ;
< Y=0 SI LE BIT DOIT ETRE MIS A 0,
< Y#0 (1 OU 2) SINON...
LA XR
LBI 0
SCLD XWOR%2
SLRS XWOR%2
LR A,X < X=NUMERO DE BIT DANS LE MOT,
PSR X,Y < SAVE LE NUMERO DE BIT DANS LE
< MOT ET LE CUMUL "EOR"...
LY YR
XR Y,B
SLLD NMOTL=0+NBITMO
ORR A,Y < Y=NUMERO DE MOT DANS LE MASQUE,
LRM A
WORD AMASK < A=ADRESSE DU MASQUE DANS 'CDA',
ADR Y,A < A=ADRESSE DU MOT EN 'CDA'.
LRM B,X
WORD MCDAM < B=ADRESSE DE RECEPTEUR,
WORD 1 < X=1 MOT A DEPLACER.
RCDA
PLR X,Y
LB MCDAM
RBT NBITMO,X < A PRIORI, ON RAZE...
CPZR Y < ALORS ???
JE TW11 < Y=0, XR.EOR.YR=0...
SBT NBITMO,X < Y=1, XR.EOR.YR=1...
TW11: EQU $
STB MCDAM
LRM B,X
WORD MCDAM
WORD 1
WCDA
DC XR < BALAYAGE HORIZONTAL,
JGE TW10
DC YR < BALAYAGE VERTICAL,
JGE TW9
TW4: EQU $
XWOR%: VAL 0
TW13: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMASKO-ZERO
BSR APRINT < EDITION DE "MASK ON?"...
XWOR%7: VAL 0
BSR AIN < MASQUE ON OU OFF :
STZ IMASKO < OFF A PRIORI...
CPI "N"
JE TW14 < OK, IMASKO=0 ==> OFF...
IC IMASKO < A PRIORI, IMASKO=1 ==> ON...
CPI "O"
JNE TW13 < ?!??!??!
TW14: EQU $
PAGE
<
<
< B O U C L E D ' I N T E R R O G A T I O N :
<
<
LOOP: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMINT-ZERO
BSR APRINT < ENVOI DU MESSAGE ">",
XWOR%7: VAL 0
BSR AIN < A=COMMANDE COURANTE...
CPI REP0 < ET VALIDATION...
JL TW12 < ERREUR...
CPI REPZ < VALIDATION, SUITE...
JG TW12 < ERREUR...
LR A,X < X=COMMANDE DEMANDEE,
BR &ACOM < BRANCHEMENT AU MODULE SPECIFIQUE...
TW12: EQU $
BR AERROR < ERREUR...
PAGE
<
<
< G E N E R A T I O N E T V A L I D A T I O N :
<
<
XWOR%1: VAL PILE-LTNI-LTNI
XWOR%2: VAL $-ZERO
IF XWOR%2-XWOR%1,XWOR%,,
IF ATTENTION : TROP LONG !!!
XWOR%: VAL 0
DZS XWOR%1-XWOR%2+1 < NETTOYAGE...
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.