NMTC: VAL "TC"
NMQ: VAL " Q"
IF NMPROC-NMTC,,XWOR%,
IF NMPROC-NMQ,,XWOR%,
IF ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%: VAL 0
IF NMPROC-NMTC,XWOR%9,,XWOR%9
IDP "TC - VERSION INTERPOLATEUR DE TW"
XWOR%9: VAL 0
IF NMPROC-NMQ,XWOR%9,,XWOR%9
IDP " Q - VERSION DE 'TC' 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
ITEM1: EQU ITEM2+LTNI
EOT #SIP IMAGE 256#
NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT.
NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT...
NBITOC: VAL NBITMO/NOCMO < NOMBRE DE BITS PAR OCTET...
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-NMQ,XWOR%,,XWOR%
NMPROC: VAL NMTC < SI " Q", ON LE REMPLACE PAR "TC",
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
TV1:: VAL 0 < ZONE DE VISUALISATION TELEVISION.
IF TV1,,XWOR%,
IF ATTENTION : DE NOMBREUSES CHOSES VONT MERDER !!!
XWOR%: VAL 0
AMASK:: VAL NCOOL*LIMAG+TV1 < ADRESSE DU MASQUE DANS LA 'CDA'.
IZBUF:: VAL AMASK+LIMAG < DEBUT DU BLOC COURANT DU Z-BUFFER DANS
< LA 'CDA' QUAND ON EST EN '!CDAI'...
LIZBUF:: VAL '1000 < LE Z-BUFFER EST DECOUPE EN BLOCS DE
< 16K MOTS.
NZBUF:: VAL 16 < CE QUI FAIT DONC 16 BLOCS...
XWOR%1: VAL 1024
XWOR%2: VAL LIZBUF/XWOR%1*NZBUF
XWOR%3: VAL LIMAG/XWOR%1*NBITMO
IF XWOR%3-XWOR%2,,XWOR%,
IF ATTENTION : LIZBUF ET NZBUF INCOMPATIBLES !!!
XWOR%: VAL 0
LSDKU:: VAL 128
NSDKU:: VAL LIZBUF/LSDKU < INCREMENT DE PASSAGE D'UN BLOC DU
< Z-BUFFER AU SUIVANT SUR 'DKU'...
TV2:: VAL IZBUF+LIZBUF < ZONE DE SAUVEGARDE DE L'IMAGE RESIDENTE
< LORS DES INTERPOLATIONS DE COULEURS.
LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE
< L'EOT A PRIORI...
PROG
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="
MTORE: BYTE 6;'6D
ASCI "TORE? "
MK: BYTE 3;'6D
ASCI "K="
MASKO: BYTE 9;'6D
ASCI "MASK ON?"
MSLAS: BYTE 1;"/"
MKOEF: BYTE 6;'6D
ASCI "COEF? "
MTRX: BYTE 4;'6D
ASCI "CX= "
MTRY: BYTE 4;'6D
ASCI "CY= "
MPOINT: BYTE 6;'6D
ASCI "#PTS= "
MPASQ: BYTE 5;'6D
ASCI "PAS="
MINTC: BYTE 24;'6D
ASCI "INTERPOLATION COULEURS? "
MDIAF: BYTE 7;'6D
ASCI "DIAPH?"
XWOR%7: VAL 0
<
< ZONE EN RECOUVREMENT :
<
BUFIN: EQU ITEM2+'518 < 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 30 < LONGUEUR DE LA PILE DE TRAVAIL.
STACK: EQU BUFMV+LBUFMV < PILE DE TRAVAIL.
IF ITEM1-STACK-LSTACK,,,XWOR%
IF ATTENTION : LA ZONE EN RECOUVREMENT DE
IF L'ITEM2, RECOUVRE AUSSI L'ITEM1 !!!
XWOR%: VAL 0
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: EQU SAVER < SAUVEGARDE D'UN MOT DE LA TRAME
< SCRATCH ROUGE,
MCDAV: EQU SAVEV < DE MEME POUR LE VERT,
MCDAB: EQU SAVEB < 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.
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...
MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'.
CTCDA: WORD TV2-TV1 < POUR PASSER DE TV1 A TV2...
XCTCDA: WORD 0 < IDEM...
INTC: WORD 0 < 0 : PAS D'INTERPOLATION COULEURS,
< 1 : INTERPOLATIONS DES COULEURS.
IMASKO: WORD 0 < 0 : MASK OFF,
< 1 : MASK ON...
FK: FLOAT 1 < CONSTANTE 'K'...
F05: FLOAT 0.5
F1: FLOAT 1
FWORK: FLOAT 0 < VARIABLE DE TRAVAIL...
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...
AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1.
ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT.
XWOR%7: 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="
AMTORE: EQU MTORE < "TORE?"
AMASKO: EQU MASKO < "MASK ON?"
AMSLAS: EQU MSLAS < "/"
AMTRX: EQU MTRX < "TX="
AMTRY: EQU MTRY < "TY="
AMK: EQU MK < "K="
AMPOIN: EQU MPOINT < "#POINTS="
AMPASQ: EQU MPASQ < "PAS="
AMINTC: EQU MINTC < "INTERPOLATION COULEURS?"
AMDIAF: EQU MDIAF < "DIAPH?"
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.
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...
IF MODE-VISU,XWOR%7,,XWOR%7
APRINT: WORD PRINT < EDITION D'UN MESSAGE.
XWOR%7: VAL 0
AENTER: WORD ENTER < ENTREE DE QUELQUE CHOSE SUR LA VISU...
AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE
AIN: WORD IN < ENTREE D'UN CARACTERE REPONSE.
AIHEX: WORD IHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL.
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
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.
ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE
< L'UN DES SOUS-PROGRAMMES PRECEDENTS.
ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES...
AGZB: WORD GZB < ACCES AU Z-BUFFER...
ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION.
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
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 MERR-ZERO*NOCMO+1
WORD 1 < MESSAGE D'ERREUR POUR " P"...
DEMMEM: WORD 4 < DEMANDE DE 16 K MOTS...
RELMEM: WORD 4 < RETOUR A 4K MOTS...
WORD '8000
WORD '2000
DEMCC: WORD 2 < ACCES AU CCI INTERPRETATIF.
WORD 0 < ADRESSE DE LA CARTE.
WORD 80
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...
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
DEMLOD: BYTE '80?SGNLNS;'02 < DEMANDE DE CHARGEMENT DE "GE".
WORD BRANCH-ZERO*NOCMO
WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO
WORD -1
IF MODE-ITEM,XWOR%7,,XWOR%7
SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1.
XWOR%7: VAL 0
<
< ACCES AU Z-BUFFER :
<
RDKU: BYTE '8A;'0C < 'DKU' --> 'MEMTV' EN QUANTA=1.
WORD IZBUF*NOCMO
WORD LIZBUF*NOCMO
WORD 0
WDKU: BYTE '8A;'0E < 'MEMTV' --> 'DKU' EN QUANTA=1.
WORD IZBUF*NOCMO
WORD LIZBUF*NOCMO
WORD 0
SDKU: WORD -1 < NUMERO DU BLOC COURANT, N'EXISTE PAS
< AU CHARGEMENT.
MDKU: WORD 0 < COMPTAGE DES MODIFS DU BLOC COURANT.
ZBUF: WORD 0 < 0 : Z-BUFFER INHIBE (!CDAP),
< 1 : Z-BUFFER AUTORISE (!CDAI).
ZMAX: WORD '7FFF < PLUS GRAND NOMBRE POSITIF...
ASPDKU: WORD SPDKU < ECRITURE DU BLOC COURANT...
<
< DONNEES DE SIMULATION DU DIAPHRAGME :
<
POINTS: WORD 0 < COMPTEUR DES POINTS...
NPTS: EQU POINTS < COMPTAGE DES ASSOCIATIONS LORS D'UNE
< INTERPOLATION.
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,
NPNN: WORD 0 < NOMBRE DE POINTS NON NOIRS RECONTRES
< SUR UNE SPIRALE.
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.
FNPM: FLOAT 0 < NPM EN FLOTTANT...
FC10: FLOAT 10 < CONSTANTE ARBITRAIRE,
FC2: FLOAT 2
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
PC: WORD 0 < SAUVEGARDE DE NIVEAU(XR,YR).
PAGE
<
<
< C O M M O N :
<
<
COMMON
COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE
< A L'OPERATEUR FLOTTANT !!!
<
< RELAIS :
<
ASPMOY: WORD SPMOY < SIMULATION DU DIAPHRAGME...
AFOND: WORD SPFOND < SOUS-PROGRAMME DE FONDU ENCHAINE.
ASPINT: WORD SPINT < RECHERCHE DES ASSOCIATIONS LORS
< D'UNE INTERPOLATION.
ASPRAZ: WORD SPRAZ < MISE AU NOIR DE (XR,YR).
AROND: WORD ROND < ARRONDI FLOTTANT...
<
< DONNEES DE BOUCHAGE :
<
LNIV: EQU $
DZS NIVMAX+1 < UN MOT PAR NIVEAU ; LE MOT DE RANG (X)
< COMPTE LES OCCURENCES DU NIVEAU (X) SUR
< LA SPIRALE COURANTE...
ALNIV0: WORD LNIV,X < RELAIS
ALNIV1: WORD LNIV-1,X < D'ACCES...
IDIAF: WORD 0 < 0 : SIMULATION D'UN DIAPHRAGME,
< 1 : BOUCHAGE DES TROUS...
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
AERROR: 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 ERROR < =
WORD ERROR < >
WORD ERROR < ?
WORD ERROR < @
WORD ERROR < A
WORD ERROR < B
WORD ERROR < C
WORD DISP < D : RESIDENT <-- IMAGE SGN
WORD ERROR < E
WORD GOGE < F : FIN
WORD ERROR < G
WORD FONDU < H : RESIDENT <-- (RESIDENT).FONDU.(SCRA)
WORD INTER < I : INTERPOLATION RESIDENT --> SCRATCH.
WORD JNTER < J : IDEM A 'I' SANS ASSOCIATION...
WORD INFK < K : ENTREE CTTE TRANSFORMATION
WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE
WORD ERROR < M
WORD NAME < N : NOMME L'IMAGE RESIDENTE
WORD ERROR < O
WORD ERROR < P
WORD MOYEN < Q : SIMULATION D'UN DIAPHRAGME
WORD ERROR < R
WORD IMSAV < S : SCRATCH <-- (RESIDENT)
WORD ERROR < T
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'
WORD ERROR < Z
REPZ: VAL $-KOM-1 < DERNIERE COMMANDE.
PAGE
PROG
IF MODE-VISU,XWOR%7,,XWOR%7
<
<
< 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
XWOR%7: VAL 0
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
<
<
< 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 T R E E U N C A R A C T E R E :
<
<
IN: EQU $
LAD DEMIN
BSR AENTER
LBY &AREP < A=CARACTERE REPONSE.
RSR
PAGE
<
<
< E N T R E E U N N O M B R E H E X A - D E C I M A L :
<
<
IHEX: EQU $
LAD DEMHEX
BSR AENTER
BSR AHEX < DONC MEMES RESULTATS QUE 'HEX'...
RSR
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
<
<
< T R A I T E M E N T D E S E R R E U R S :
<
<
ERROR: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMERR-ZERO
BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR...
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
LAD DEMOUT
SVC 0 < EDITION DU MESSAGE D'ERREUR...
XWOR%7: VAL 0
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...
LX NMOTS < X=NOMBRE DE MOTS A RAZER...
TW2: EQU $
STZ &AITEM2 < RAZE DES ITEMS 1 ET 2.
JDX TW2
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 < 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 COMON+128 < C=BASE DU COMMON...
WORD LOC+128 < L=BASE DU LOCAL...
STZ XCTCDA < REINITIALISATION A CAUSE DU ALT-MODE...
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...
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 < CHOIX ENTRE !CDAI ET !CDAP...
STZ ZBUF < PAS DE Z-BUFFER A PRIORI...
CPI "P"
JE TW21 < VERS LA 'CDA-PRIVEE'...
CPI "I"
JNE TW20 < ?!??!??!
IC ZBUF < DANS LE CAS DE LA 'CDA-IMAGE', ON
< AUTORISE LE Z-BUFFER...
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 IZBUF-TV1>XWOR%1 < A=LONGUEUR NECESSAIRE (IMAGE+MASQUE),
CPR A,B < CELA SUFFIT-IL ???
JL GOGE < B<A : INSUFFISANT POUR TRAVAILLER...
TW13: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMASKO-ZERO
BSR APRINT < EDITION DE "MASK ON?"...
XWOR%7: VAL 0
BSR AIN
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
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
<
<
< 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 Z - B U F F E R :
<
<
< UTILISATION DES REGISTRES :
< A=ADRESSE D'UN MOT DANS LE Z-BUFFER (YS/XS),
< B=INFORMATION (INT(FZS)) A Y METTRE, OU RESULTAT...
< Y=YLOAD/YSTORE SUIVANT LE SENS...
<
<
GZB: EQU $
STB MCDAR < AU CAS OU CE SERAIT 'YSTORE'...
PSR A,X
LBI 0
XWOR%1: VAL LIZBUF=0
SCLD NBITMO-XWOR%1 < B=NUMERO DE BLOC,
SLRS NBITMO-XWOR%1 < A=ADRESSE DANS LE BLOC.
XR A,B < A=NUMERO DE BLOC, B=ADRESSE DANS LE BLOC.
CP SDKU < LE BLOC DEMANDE EST-IL LE BLOC COURANT ?
JE GZB2 < OUI...
<
< REECRITURE DU BLOC COURANT LORSQU'IL A ETE MODIFIE :
<
PSR A < SAVE LE BLOC DEMANDE,
BSR ASPDKU < ECRITURE DU BLOC COURANT S'IL EXISTE
< ET S'IL A ETE MODIFIE...
PLR A < RESTAURE LE BLOC DEMANDE...
<
< LECTURE DU BLOC DEMANDE :
<
GZB3: EQU $
STA SDKU < NOUVEAU BLOC COURANT,
STZ MDKU < PAS ENCORE MODIFIE...
XWOR%1: VAL NSDKU=0
SLLS XWOR%1 < CONVERSION EN UNE ADRESSE DKU...
STA RDKU+3
LAD RDKU
SVC 0 < LECTURE DU BLOC DEMANDE...
<
< ACCES AU MOT DEMANDE :
<
GZB2: EQU $
LRM A
WORD IZBUF
ADR A,B < B=ADRESSE DU MOT DEMANDE DANS LA 'CDAI'.
LAD MCDAR
XR A,B < A=ADRESSE DU MOT DANS LA 'CDAI',
< B=ADRESSE DU MOT OU RANGER/PRENDRE
< L'INFORMATION.
LXI 1 < X=1 MOT A TRANSFERER...
YLOAD:: VAL 0 < MODE LOAD,
YSTORE:: VAL 1 < MODE STORE.
CPZR Y < QUEL EST LE SENS DE L'OPERATION ???
JE GZB4 < LOAD...
IC MDKU < STORE : DANS CE CAS, ON COMPTABILISE
< LA MISE A JOUR...
WCDA
JMP GZB5
GZB4: EQU $
RCDA
GZB5: EQU $
LB MCDAR < QUELQUE SOIT LE MODE 'B' EST BON...
PLR A,X
RSR
<
<
< E C R I T U R E B L O C C O U R A N T :
<
<
SPDKU: EQU $
LA SDKU < A=BLOC COURANT...
JAL GZB6 < IL N'EXISTE PAS, ON EST DONC A
< L'INITIALISATION, ON NE PEUT
< QUE LIRE LE Z-BUFFER SUR 'DKU'...
CPZ MDKU < IL EXISTE, ALORS A-T'IL ETE MODIFIE ???
JE GZB6 < NON, INUTILE D'ECRIRE...
XWOR%1: VAL NSDKU=0
IF BIT>XWOR%1-NSDKU,,XWOR%,
IF ATTENTION : NSDKU DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%: VAL 0
SLLS XWOR%1 < CONVERSION EN UNE ADRESSE SUR DKU...
STA WDKU+3
LAD WDKU
SVC 0 < REECRITURE DU BLOC COURANT...
JE GZB6 < OK...
QUIT 1 < DKU ?!??!??!!!
GZB6: EQU $
RSR
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.
AD XCTCDA < DISCRIMINATION TV1/TV2...
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
<
<
< 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
<
<
< R E C H E R C H E D U V O I S I N
< I M M E D I A T D E M E M E C O U L E U R :
<
<
SPINT: EQU $
PSR A,B,X,Y
BSR ASPGPR < TEST DU NIVEAU(XR,YR)...
JAE SPINT7 < (XR,YR) EST NOIR, ON L'IGNORE...
STA CUMUL < CUMUL=NIVEAU(POINT D'ORIGINE (XR,YR)).
LA XR
LB YR
PSR A,B < SAUVEGARDE DU POINT (XR,YR).
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.
<
< PARCOURS D'UN BRAS :
<
SPINT1: EQU $
LA LB0
STA LB < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPINT2: EQU $
LA NP
CP NPM < EST-CE FINI ???
JE SPINT3 < OUI, ON N'A PAS TROUVE DE POINT A
< ASSOCIER AU POINT ORIGINE...
LA XR
STA XS < XS=XR...
JAL SPINT4 < LE POINT EST HORS-ECRAN...
CPI NPOLM1
JG SPINT4 < HORS-ECRAN...
LA YR
STA YS < YS=YR...
JAL SPINT4 < HORS-ECRAN...
CPI NLIGM1
JG SPINT4 < HORS-ECRAN...
IC NP < COMPTAGE DES POINTS TESTES DANS L'ECRAN.
BSR ASPGPS < A=NIVEAU(XS,YS), TEL QUE XS=XR, YS=YR.
CPZ INTC < INTERPOLATION COULEURS ???
JE SPINT8 < NON...
JAE SPINT4 < OUI, MAIS (XS,YS) EST NOIR...
JMP SPINT9 < OUI, ET (XS,YS) N'EST PAS NOIR...
< ALORS ON S'AERRETE LA...
SPINT8: EQU $ < PAS D'INTERPOLATION COULEURS :
CP CUMUL < NIVEAU(XS,YS)=NIVEAU(POINT ORIGINE) ???
JNE SPINT4 < NON, PASSONS AU SUIVANT...
<
< CAS OU ON A TROUVE UN POINT (XS,YS) DE
< L'IMAGE D'ARRIVEE A ASSOCIER AU POINT
< ORIGINE (XR,YR) DE L'IMAGE DE DEPART :
<
SPINT9: EQU $
IC NPTS < COMPTAGE DES ASSOCIATIONS...
LA YR
SWBR A,A
OR XR
LR A,X < X=POINT ASSOCIE DE L'IMAGE D'ARRIVEE.
PLR A,B
STA XR < RESTAURATION DU
STB YR < POINT ORIGINE...
SWBR B,B
ORR A,B < B=YR/XR DU POINT ORIGINE DE L'IMAGE
< DE DEPART.
LR X,A < A=YS/XS DU POINT ASSOCIE DE L'IMAGE
< D'ARRIVEE.
XR A,B
LYI YSTORE
BSR AGZB < ENVOI EN Z-BUFFER, TEL QUE :
< (YR/XR)=YS/XS.
JMP SPINT7 < ET C'EST FINI...
<
< PARCOURS DE LA SPIRALE :
<
SPINT4: 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 SPINT2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPINT5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPINT5: 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 SPINT1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPINT3: EQU $
PLR A,B
STA XR < RESTAURATION
STB YR < DE (XR,YR),
SPINT7: EQU $
PLR A,B,X,Y
RSR
PAGE
<
<
< M I S E A U N O I R D E ( X R , Y R ) :
<
<
SPRAZ: EQU $
PSR A
LAI 0
BSR ASPRPR < NIVEAU(XR,YR) <-- 0.
PLR A
RSR
PAGE
<
<
< A R R O N D I F L O T T A N T :
<
<
ROND: EQU $
JAL ROND1
FAD F05
JMP ROND2
ROND1: EQU $
FSB F05
ROND2: EQU $
FIX
RSR
PAGE
<
<
< I N T E R P O L A T I O N :
<
<
< PHILOSOPHIE :
< ON CONSIDERE L'IMAGE RESIDENTE COMME
< L'IMAGE DE DEPART : D=(XR,YR), ET
< L'IMAGE SCRATCH COMME L'IMAGE D'ARRIVEE :
< A=(XS,YS) ; ON CONSIDERE CHAQUE POINT NON
< NOIR (XR,YR) DE 'D', ET ON CENTRE AU
< POINT (XS,YS) DE L'IMAGE 'A' TEL QUE
< XS=XR, YS=YR UNE SPIRALE DE LONGUEUR
< INDETERMINEE SUR LAQUELLE ON RECHERCHE
< LE PREMIER POINT (XS,YS) AYANT MEME
< NIVEAU QUE LE POINT ORIGINE DE LA
< RECHERCHE (XR,YR) ; ENSUITE ON INTERPOLE
< ENTRE (XR,YR) ET (XS,YS) A L'AIDE DE
< LA CONSTANTE FK :
< XR <-- (XR)+(XS-XR)*FK,
< YR <-- (YR)+(YS-YR)*FK.
< N(R) <-- N(R) SI PAS D'INTERPOLATION COULEUR,
< N(R) <-- N(R)+(N(S)-N(R))*FK SI OUI...
<
<
< POINTS D'ENTREE :
< INTER : FAIT L'ASSOCIATION D --> A
< INITIALEMENT, PUIS L'INTERPOLATION...
< JNTER : REPREND UNE ASSOCIATION ANTERIEURE,
< PUIS FAIT L'INTERPOLATION...
<
<
INTER: EQU $
CPZ ZBUF < Z-BUFFER ACTIF ???
JNE INT1 < OUI, OK...
BR AERROR < NON, ERREUR !!!
INT1: EQU $
STZ NPTS < RAZ DU NOMBRE D'ASSOCIATION...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPOIN-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE INTER < ERREUR...
JAE INTER < NPM=0 !!!
STA NPM < 'NPM' PEUT ETRE QUELCONQUE...
INT10: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMINTC-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN
STZ INTC < INTC=0 : NON A PRIORI...
CPI "N"
JE INT11 < "N"...
CPI "O"
JNE INT10 < ?!???!?!
IC INTC < INTC=1 : OUI...
LRM A,B,X < ET ALORS DUPLIQUONS L'IMAGE
< RESIDDENTE EN TV2...
WORD TV2
WORD IMAGE
WORD LIMAG*NCOOL
WCDA
INT11: EQU $
LAI 1
STA PASQ < PAS DE PARCOURS DE LA SPIRALE.
<
< CLEAR DU Z-BUFFER :
<
LBI 0 < ON VA FORCER 0 PARTOUT...
LAI 0
LYI YSTORE
INT5: EQU $
BSR AGZB
ADRI 1,A < AU MOT SUIVANT...
JANE INT5
STZ XS
STZ YS
BSR ASPRPS < ON ELIMINE LE POINT XS=YS=0, CAR LA
< LA CONFIGURATION '0000 EN Z-BUFFER
< INDIQUE UNE NON-ASSOCIATION...
<
< RECHERCHE DES ASSOCIATIONS :
<
LB ASPINT
STB ASP
BSR ASPOP < VERS LA RECHERCHE D'ASSOCIATIONS ENTRE
< L'IMAGE DE DEPART ET CELLE D'ARRIVEE.
<
< INTERPOLATION :
<
JNTER: EQU $
LB ASPRAZ
STB ASP
BSR ASPOP < REMISE AU NOIR DE L'IMAGE RESIDENTE,
< QUI VA DONNER LA NOUVELLE IMAGE DE
< DEPART...
<
< GENERATION DE LA NOUVELLE IMAGE DE
< DEPART OU IMAGE INTERMEDIAIRE :
<
CPZ NPTS < TEST DU NOMBRE D'ASSOCIATIONS ???
JE INT2 < AUCUNE...
LAI 0 < A=(YR/XR)=ADRESSE DANS LE Z-BUFFER.
INT3: EQU $
PSR A
LYI YLOAD
BSR AGZB < B=(YS/XS) ASSOCIE A (YR/XR).
XWOR%1: VAL '00FF < POUR MASQUER L'OCTET DROIT...
CPZR B < L'ENTREE EST-ELLE VIDE ???
JE INT4 < BIEN QUE CELA NE SOIT PAS OBLIGATOIRE-
< MENT VRAI, ON CONSIDERE QU'IL N'Y
< EN A PAS ; ON PERD LE POINT XS=YS=0 !!!
< (QUI A ETE DEJA ELIMINE...)
XR A,B
PSR A
ANDI XWOR%1
STA XS
PLR A
SLRS XWOR%1)MFFFF=0
STA YS < (XS,YS)=POINT D'ARRIVEE.
LAI 0
SLLD XWOR%1)MFFFF=0
STA YR
LAI 0
SLLD XWOR%1)MFFFF=0
STA XR < (XR,YR)=POINT DE DEPART.
CPZ INTC < INTERPOLATION COULEURS ???
JE INT20 < NON...
LA XS
LB YS
PSR A,B < SAUVEGARDE DE (XS,YS).
LA XR
LB YR
STA XS < AFIN QUE L'ACCES
STB YS < EN SCRATCH SOIT CORRECT...
LA CTCDA < OUI,
STA XCTCDA
BSR ASPGPS < ACCES A TV2, OU L'IMAGE RESIDENTE
< INITIALE A ETE SAUVEGARDEE...
STZ XCTCDA
STA CUMUL < CUMUL=NIVEAU(XR,YR)...
PLR A,B < RESTAURATION DE (XS,YS)...
CPZ CUMUL < VALIDATION ??!??!?!
JG INT20X < OK...
QUIT 1 < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!!
JMP INT4 < ON IGNORE CE POINT...
INT20X: EQU $
STA XS
STB YS
INT20: EQU $
LA XS
SB XR
FLT
FMP FK
BSR AROND
AD XR
STA XR < INTERPOLATION :
< XR <-- (XR)+(XS-XR)*FK.
JAL INT4 < HORS-ECRAN...
CPI NPOLM1
JG INT4 < HORS-ECRAN...
LA YS
SB YR
FLT
FMP FK
BSR AROND
AD YR
STA YR < INTERPOLATION :
< YR <-- (YR)+(YS-YR)*FK.
JAL INT4 < HORS-ECRAN...
CPI NLIGM1
JG INT4 < HORS-ECRAN...
BSR ASPGPS < A=NIVEAU(XS,YS),
JAG INT20Y < OK...
QUIT 1 < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!!
JMP INT4 < ON IGNORE CE POINT...
INT20Y: EQU $
CPZ INTC < INTERPOLATION COULEURS ???
JE INT21 < NON...
SB CUMUL < OUI, INTERPOLONS LES COULEURS :
FLT
FMP FK
BSR AROND
AD CUMUL < NIV(XR,YR)+(NIV(XS,YS)-NIV(XR,YR))*FK,
ANDI NIVMAX < QUE L'ON TRONQUE BRUTALEMENT...
INT21: EQU $
BSR ASPRPR < GENERATION DE L'IMAGE INTERPOLEE
< EN RESIDENT...
INT4: EQU $
PLR A
ADRI 1,A < A L'ASSOCIATION SUIVANTE...
JANE INT3
INT2: EQU $
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< S I M U L A T I O N D ' U N D I A P H R A G M E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME ETUDIE LE
< VOISINNAGE DU POINT (XR,YR) SUR
< UNE SPIRALE CENTRE ; MOINS LE POINT
< EST ENTOURE, PLUS IL A DE CHANCE DE
< DISPARAITRE EN (XS,YS) ; ET INVERSEMENT
< PLUS IL EST ENTOUR, PLUS IL A DE CHANCE
< DE RESTER...
<
<
< ARGUMENT :
< (XR,YR) = POINT RESIDENT COURANT.
<
<
SPMOY: EQU $
PSR A,B,X,Y
CPZ IDIAF < DIAPHRAGME ???
JE SPMOYG < OUI...
LXI NIVMAX+1 < NON, BOUCHAGE DES TROUS...
SPMOYH: EQU $
STZ &ALNIV1 < RAZ DES COMPTEURS D'OCCURENCE...
JDX SPMOYH
JMP SPMOY6
SPMOYG: EQU $
BSR ASPGPR < SIMULATION D'UN DIAPHRAGME...
JAE SPMOY7 < SI 'DIAPH', ON IGNORE LES POINTS NOIRS...
STA PC < SAUVEGARDE DE NIVEAU(XR,YR).
SPMOY6: EQU $
IC POINTS
LA XR
LB YR
PSR A,B < SAUVEGARDE DU POINT (XR,YR).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
STZ NPNN < NPNN=NOMBRE DE POINTS NON NOIRS 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.
CPZ IDIAF < DIAPHRAGME ???
JNE SPMOY8 < NON BOUCHAGE DES TROUS : ON COMMENCE
< SUR LE POINT CENTRAL...
LA XR < SIMULATION D'UN DIAPHRAGME :
AD DELTAX < ON SAUTE LE POINT CENTRAL (XR,YR)...
STA XR
LA YR
AD DELTAY
STA YR
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),
XR A,X
IC &ALNIV0 < COMPTAGE DES OCCURENCES DU NIVEAU (X)...
XR A,X
JAE SPMOY4
IC NPNN < COMPTAGE DES POINTS NON NOIRS...
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)...
CPZ IDIAF < DIAPHRAGME ???
JE SPMOYI < OUI...
<
< BOUCHAGE DES TROUS : ON VA REMPLACER
< LE NIVEAU DU POINT CENTRAL PAR LE
< NIVEAU DE PLUS FORTE OCCURENCE (ET
< LE PLUS LUMINEUX, SI'IL Y A EX-AEQUO) :
<
LAI -1 < POUR RECHERCHER LE MAX DES OCCURENCES,
LXI NIVMAX+1
SPMOYJ: EQU $
CP &ALNIV1 < ALORS ???
JGE SPMOYK < MOINS D'OCCURENCES...
LA &ALNIV1 < ON VIENT DE TOMBER SUR UN NOUVEAU MAX
< DES OCCURENCES,
LR X,B < B=NIVEAU+1 CORRESPONDANT...
SPMOYK: EQU $
JDX SPMOYJ
LR B,A
ADRI -1,A < A=NIVEAU DE PLUS FORTE OCCURENCE...
JMP SPMOYD < VERS LE TRACE...
<
< SIMULATION DE LA FERMETURE D'UN DIAPHRAGME :
<
SPMOYI: EQU $
LA NPNN
FLT
FDV FNPM < NPNN/NPM.
FMP FK < MODULATION...
FMP FC10
FST FWORK
FMP FWORK
FAD FC2
FIX
STA CUMUL < CUMUL EST UN PARAMETRE APPARTENANT
< AU SEGMENT (FC2,FC2+FC10*FC10*FK) ; PLUS
< CUMUL EST PROCHE DE LA BORNE SUPERIEURE
< MOINS LE POINT DOIT DISPARAITRE...
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 FK < REINITIALISATION...
AD FK+1 < ????
AD RDN2
SPMOYC: EQU $
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA FK
EOR FK+1
AD RDN2
SPMOYF: EQU $
STA RDN4
EOR RDN
SARD NBITMO
DV CUMUL
LA PC < A=NIVEAU(XR,YR),
CPZR B < LE NOMBRE ALEATOIRE GENERE EST-IL
< DIVISIBLE PAR 'CUMUL' ???
JNE SPMOYD < NON, ON GARDE LE POINT...
ADRI -1,A < OUI, ON REDUIT SON NIVEAU...
SPMOYD: EQU $
BSR ASPRPS < QUE L'ON AFFECTE A (XS,YS).
SPMOY7: EQU $
PLR A,B,X,Y
RSR
PAGE
<
<
< F O N D U E N C H A I N E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE UN FONDU
< ENCHIANE ENTRE L'IMAGE RESIDENTE ET
< L'IMAGE SCRATCH SUIVANT LA VALEUR DE
< LA CONSTANTE 'FK' :
<
< RESIDENT <-- K*(SCRATCH)+(1-K)*(RESIDENT)
<
<
SPFOND: EQU $
PSR A,B
FLD F1
FSB FK
FST FWORK < 1-K.
BSR ASPGPR < A=NIVEAU(RESIDENT),
FLT
FMP FWORK
FST FWORK < (1-K)*(RESIDENT).
BSR ASPGPS < A=NIVEAU(SCRATCH),
FLT
FMP FK < K*(SCRATCH).
FAD FWORK
FIX
ANDI NIVMAX < ((1-K)*(RESIDENT)+K*(SCRATCH)) MODULO
< NIVMAX.
BSR ASPRPR < QUE L'ON MET EN RESIDENT...
PLR A,B
RSR
PAGE
<
<
< S I M U L A T I O N D ' U N D I A P H R A G M E :
<
<
< FONCTION :
< CETTE COMMANDE ETUDIE LE VOISINNAGE DE
< CHAQUE POINT RESIDENT ; PLUS IL EST
< ENTOURE, PLUS IL A DE CHANCE DE SUB-
< SISTER SUR L'IMAGE SCRATCH...
<
<
MOYEN: EQU $
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).
FLT
FST FNPM < FNP=NPM EN FLOTTANT...
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...
STZ IDIAF < DIAPHRAGME A PRIORI...
MOYEN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMDIAF-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DE LA REPONSE :
CPI "O"
JE MOYEN3 < DIAPHRAGME : IDIAF=0,
CPI "N"
JNE MOYEN2 < ?!??!
IC IDIAF < BOUCHAGE DES TROUS : IDIAF=1.
MOYEN3: EQU $
STZ POINTS < RAZ LE NOMBRE DE POINTS...
LB ASPMOY < B=ADRESSE DU S/P DE MOYENNAGE...
JMP IM1
PAGE
<
<
< F O N D U E N C H A I N E :
<
<
FONDU: EQU $
LB AFOND < B=ADRESSE DU SOUS-PROGRAMME...
JMP IM2 < VERS L'EXECUTION DU FONDU...
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
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
IM1: EQU $
IM2: EQU $
STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
BSR ASPOP
BR ALOOP
PAGE
<
<
< E N T R E E D E L A C O N S T A N T E ' K '
<
<
INFK: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMK-ZERO
BSR APRINT < "K="
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU NUMERATEUR,
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.
JNE GORGX2 < ERREUR...
JAE GORGX2 < NE PEUT ETRE NUL...
FLT
FST FK
LR Y,A
FLT
FDV FK < NUMERATEUR/DENOMINATEUR...
FST FK < OK...
BR ALOOP
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 LA REPONSE...
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 LA REPONSE...
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
<
<
< 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 ITEM2-ZERO
IF $-ZERO-XWOR%1,XWOR%,,
IF ATTENTION : TROP LONG !!!
XWOR%: VAL 0
XWOR%1: VAL PILE-LTNI-LTNI
XWOR%2: VAL $-ZERO
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.