NMTZ: VAL "KD"
NMP: VAL " /"
IF NMPROC-NMTZ,,XWOR%,
IF NMPROC-NMP,,XWOR%,
IF ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%: VAL 0
IF NMPROC-NMTZ,XWOR%9,,XWOR%9
IDP "KD - REMPLISSAGE RECURSIF D'UN CONTOUR"
XWOR%9: VAL 0
IF NMPROC-NMP,XWOR%9,,XWOR%9
IDP " / - VERSION DE 'KD' INTERPRETATIVE"
XWOR%9: VAL 0
IDP "RELEASE 31/05/1984"
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
X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE.
X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE.
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-NMP,XWOR%,,XWOR%
NMPROC: VAL NMTZ < SI " 3", ON LE REMPLACE PAR "T3",
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 < ADRESSE DE LA MEMOIRE DE VISUALISATION
< EN 'CDAI'.
IF TV1-0,,XWOR%,
IF TV1 DOIT ETRE NUL, SINON, DE NOMBREUSES
IF SEQUENCES DE CODE SONT MAUVAISES !!!
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
< 4K 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 < ADRESSE DE LA DEUXIEME IMAGE SCRATCH
< UTILISEE EN PARTICULIER POUR LA MODU-
< LATION D'AMPLITUDE SUR LA NORMALE.
LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE
< L'EOT A PRIORI...
<
< PILE VIRTUELLE DE RECURSIVITE :
<
SSTACK:: VAL NCOOL*LIMAG+TV2 < ELLE OCCUPE UNE BONNE PARTIE DE 'CDAI'...
PROG
PAGE
<
<
< M E S S A G E S :
<
<
MMCDA: BYTE 5;'6D
MCDAI: ASCI "!CDA"
BYTE "I";EOT
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="
MNIVO: BYTE 5;'6D
ASCI "NIV="
MK: BYTE 3;'6D
ASCI "K="
MASKO: BYTE 9;'6D
ASCI "MASK ON?"
MSLAS: BYTE 1;"/"
MCT: BYTE 1;"="
MN: BYTE 6;'6D
ASCI "#PTS="
MP: BYTE 5;'6D
ASCI "PAS="
MT: BYTE 6;'6D
ASCI "MODE="
M10: BYTE 5;'6D
ASCI "RDN="
M11: EQU MSLAS
MBORD: BYTE 6;'6D
ASCI "BORD="
MCOLOR: BYTE 9;'6D
ASCI "COULEUR="
MFOND: BYTE 6;'6D
ASCI "FOND="
MTOPO: BYTE 8;'6D
ASCI "CONNEX="
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
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
<
<
< C O M M O N :
<
<
COMMON
COMON: WORD 0 < MOT RESERVE POUR LE BLOC FLOTTANT.
<
< 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
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
IMASKO: WORD 0 < 0 : MASK OFF,
< 1 : MASK ON...
<
< DONNEES DE GESTION DU MASQUE :
<
AEMETT: WORD 0 < ADRESSE DE L'EMETTEUR,
ARECEP: WORD 0 < ADRESSE DU RECEPTEUR.
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="
AMNIVO: EQU MNIVO < "NIVEAUX="
AMASKO: EQU MASKO < "MASK ON?"
AMSLAS: EQU MSLAS < "/"
AMK: EQU MK < "K="
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.
AMCDAI: EQU MCDAI < !CDAI.
AMMCDA: EQU MMCDA < !CDA.
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...
AIN: WORD IN < ENTREE D'UN CARACTERE,
AIHEX: WORD IHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX,
IF MODE-VISU,XWOR%7,,XWOR%7
APIN: WORD PIN < EDITION MESSAGE+ENTREE 1 CARACTERE.
APIHEX: WORD PIHEX < EDITION MESSAGE+ENTREE 4 CHIFFRES.
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
APIN: EQU AIN
APIHEX: EQU AIHEX
XWOR%7: VAL 0
AIFLOT: WORD IFLOT < ENTREE D'UNE CONSTANTE FLOTTANTE.
AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE
ACCI: WORD CCI < ACCES AU CCI.
AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN...
APMOV5: WORD PMOV5 < TV R --> RESIDENT,
APMOV6: WORD PMOV6 < TV V --> RESIDENT,
APMOV7: WORD PMOV7 < TV B --> RESIDENT.
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
<
< CONSTANTES UTILES :
<
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...
<
< POUR ACCEDER AUX IMAGES :
<
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.
XCTCDA: WORD 0
CTCDA: WORD TV2-TV1 < POUR ATTEINDRE 'TV2'...
MODX: WORD 1 < 0 : "TORE" SUR LES X,
< 1 : L'IMAGE SCRATCH NE SE REFERME PAS...
MODY: WORD 1 < DE MEME SUR L'AXE DES Y.
WORK1: WORD 0 < VARIABLE DE TRAVAIL...
FWORK: FLOAT 0 < VARIABLE DE TRAVAIL...
MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'.
AIMAGR: WORD IMAGR,X < RELAI TRAME ROUGE,
AIMAGV: WORD IMAGV,X < RELAI TRAME VERTE,
AIMAGB: WORD IMAGB,X < RELAI TRAME BLEUE.
<
< RELAIS :
<
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
<
< SOUS-PROGRAMMES SPECIFIQUES :
<
AROND: WORD ROND < ARRONDI FLOTTANT ET CONVERSION ENTIERE.
<
< DONNEES D'ARRONDI :
<
F05: FLOAT 0.5
<
< DONNEES POUR LA FONCTION :
<
FK: FLOAT 1
F0: FLOAT 0
<
< DONNEES D'ACCES AU CURSEUR :
<
CURSOR: BYTE "N";0 < CARACTERE DE DEBLOCAGE DU
< CURSEUR (ERREUR A PRIORI).
DZS 2 < COORDONNEES Y ET X.
NLIN: WORD 1024/DY-1 < NBRE DE LIGNES/IMAGE-1.
X: VAL 1 < COORDONNEE X D'UN POINT.
Y: VAL 0 < COORDONNEE Y D'UN POINT.
C3: WORD 3 < POUR MULTIPLIER
C4: WORD 4 < PAR 4/3...
IF MODE-VISU,XWOR%7,,XWOR%7
OG: WORD '0103 < OPEN GRAPHIQUE DE '01.
CU: WORD '0106 < MISE EN FONCTION DU CURSEUR
WORD 0 < GRAPHIQUE DE '01 (AMDEM=0).
LCU: WORD '0109 < LECTURE CURSEUR GRAPHIQUE
WORD CURSOR-ZERO*2 < DE '01.
WORD 6
CG: WORD '0104 < CLOSE GRAPHIQUE DE '01.
XWOR%7: VAL 0
STABIL: WORD '8A01 < DEMANDE DE STABILISATION VIDEO.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD TVPR < SUR LE PROCESSEUR ROUGE.
ACLIGN: WORD CLIGN < CLIGNOTEMENT D'UN POINT VIDEO...
IF MODE-ITEM,XWOR%7,,XWOR%7
ACOORD: WORD COORD < ENTREE D'UNE COORDONNEE 'X' OU 'Y'.
XWOR%7: VAL 0
<
< DONNEES POUR LE GENERATEUR ALEATOIRE :
<
MRDN: WORD 0 < MULTIPLICATEUR DU NOMBRE ALEATOIRE,
XRDN: WORD 0 < ET DECOMPTEUR DE 'MRDN'...
SECRDN: WORD 0 < POUR ATTEINDRE LES SECONDES...
RDN7: WORD 793 < DECOMPTEUR D'ACCES A LA SECONDE,
RDN8: WORD 1 < VALEUR COURANTE DE 'RDN7'.
RDN9: WORD 0 < SECONDE COURANTE...
DRDN: WORD 0 < DIVISEUR DU NOMBRE ALEATOIRE...
F1: FLOAT 1
RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT.
RDN1: WORD 5189 < CONSTANTE
RDN2: WORD 6791 < DE CALCUL DES
RDN3:: VAL 19 < NOMBRE ALEATOIRES...
RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT.
RDN5: WORD 4021
RDN6:: VAL 23
POINTS: WORD 16807
KRDN1: WORD 0
XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'.
KRDN2: WORD 0
XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'.
ARDN: WORD SPRDN < GENERATEUR DE NOMBRES ALEATOIRES.
<
< REMPLISSAGE :
<
AREMP: WORD REMP < SOUS-PROGRAMME RECURSIF DE REMPLISSAGE.
NCOLOR: WORD NIVMAX < DEFINITION DU NIVEAU DE REMPLISSAGE.
SCOLOR: WORD 0 < NIVEAU D'UN POINT DE DEPART DE COULEUR
< DONNEE.
IMASKD: WORD 0 < =0 : LE CHOIX DU POINT DE DEPART DANS LES
< COMMANDES "R""0...7" EST MASQUABLE,
< #1 : CE CHOIX N'EST PAS MASQUABLE...
XWOR%1: VAL 0 < INITIALISATION DE LA LISTE DES NIVEAUX,
XWOR%2: VAL -1 < POUR DECALER A DROITE...
XWOR%3: VAL '8000 < POUR MARQUER LE PREMIER BIT ET DONNE LE
< NIVEAU DU NOIR...
DO NIVMAX+1
XWOR%1: VAL XWOR%1>XWOR%2?XWOR%3
LNIVI: WORD XWOR%1)MFFFF < LISTE MAXIMALE DES NIVEAUX CONSTITUANT
< LE FOND OU LE BORD INVERSE (POUR LES
< TESTS DE VALIDATION...).
NFOND: WORD XWOR%3 < LISTE DES NIVEAUX CONSTITUANT LE FOND
< COURANT (INITIALISE SUR LE NOIR...).
XWOR%1: VAL XWOR%3
DO NIVMAX
XWOR%1: VAL XWOR%1>XWOR%2
NBORD: WORD XWOR%1 < LISTE DES NIVEAUX CONSTITUANT LE BORD
< COURANT (INITIALISE SUR LE BLANC...).
NREMP:: VAL 4+4 < ON RECONNAIT JUSQU'A LA 8-CONNEXITE...
AINCX: WORD INCX,X < LISTE DES INCREMENTS DE 'X' :
INCX: EQU $
WORD 0;-1;0;0;+1;+1;0;0;-1
IF $-INCX-1-NREMP,,XEIF%,
IF ATTENTION : LA LONGUEUR DE 'INCX' EST MAUVAISE !!!
XEIF%: VAL 0
AINCY: WORD INCY,X < LISTE DES INCREMENTS DE 'Y' :
INCY: EQU $
WORD -1;0;+1;+1;0;0;-1;-1;+1
IF $-INCY-1-NREMP,,XEIF%,
IF ATTENTION : LA LONGUEUR DE 'INCY' EST MAUVAISE !!!
XEIF%: VAL 0
XWOR%1: VAL 0 < INITIALISATION DU CUMUL,
XWOR%2: VAL -1 < POUR UN DECALAGE A DROITE,
XWOR%3: VAL '8000 < POUR MARQUER LE PREMIER BIT.
DO NREMP
XWOR%1: VAL XWOR%1>XWOR%2?XWOR%3
XWOR%4: VAL 'AAAA < AFIN D'INITIALISER SUR LA 4-CONNEXION...
LVALXY: WORD XWOR%1(XWOR%4 < ON S'INITIALISE SUR LA 8-CONNEXITE, LE
< NEUVIEME BIT (A 0) PERMETTANT LE RETOUR
< AU POINT DE DEPART...
IVALXY: WORD XWOR%1)MFFFF < POUR VALIDER 'LVALXY'...
<
< GESTION DE LA PILE VIRTUELLE :
<
KSSTAC: WORD 0 < POINTEUR DE LA PILE VIRTUELLE,
ASSTAC: WORD SSTACK < ADRESSE EN 'CDAI' DE LA PILE VIRTUELLE.
MSSTAC: WORD 0 < MOT COURANT DE LA PILE VIRTUELLE,
AMSSTA: WORD MSSTAC < ET SON ADRESSE...
ASPSTA: WORD SPSTAC < SOUS-PROGRAMME DE SIMULATION DES
< EMPILEMENTS.
<
< DONNEES DE PARCOURS
< DES SPIRALES :
<
ASPIR: WORD SPIR < MODULE DE CALCUL DU NIVEAU PONDERE
< DU POINT COURANT (XR,YR).
PASQ: WORD 0 < PAS DE PARCOURS DE LA SPIRALE.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
MODET: WORD 0 < QUE FAIRE LORS DE LA SORTIE HORS DE
< L'INTERVALLE (0,NIVMAX) :
< -1 : NIVEAUX<0 --> NOIR,
< NIVEAUX>NIVMAX --> NOIR,
< 0 : NIVEAUX CALCULES MODULO NIVMAX+1,
< +1 : NIVEAUX<0 --> NOIR,
< NIVEAUX>NIVMAX --> NIVMAX.
NP0:: VAL 1 < NOMBRE DE POINTS INITIAL D'UNE SPIRALE.
NPM: WORD NP0 < NOMBRE ENTIER DE POINTS D'UNE SPIRALE,
FNP: FLOAT <NP0<0<0 < IDEM EN FLOTTANT...
NP: WORD 0 < NOMBRE DE POINTS COURANT D'UNE SPIRALE,
< VA DE 1 A (NPM).
DCUMUL: EQU FK < NORMALISATEUR DU CUMUL.
CUMUL: FLOAT 0 < CUMUL SUR UNE SPIRALE : ON LE CALCULE
< PAR :
< SIGMA(CT(X)*NIVEAU(X)).
NCT:: VAL '09 < NOMBRE DE CONSTANTES DE TRAVAIL.
ACT: WORD CT,X < ACCES AUX CONSTANTES DE TRAVAIL.
CT: EQU $
DO NCT
FLOAT 1
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 STV2 < 8 : TV2 <-- RESIDENT R+V+B
WORD GTV2 < 9 : RESIDENT <-- TV2 R+V+B
WORD ERROR < :
WORD ERROR < ;
WORD ERROR < <
WORD DSPIR < = : DEFINITION DES SPIRALES
WORD ERROR < >
WORD TRAME < ? : ENTREE DE LA TRAME "ALEATOIRE"
WORD ERROR < @
WORD GCT < A : ENTREE DES CONSTANTES DE TRAVAIL
WORD BORD < B : ENTREE DU "BORD" DU CONTOUR
WORD COLOR < C : ENTREE DE LA "COULEUR" DE REMPLISSAGE
WORD DISP < D : RESIDENT <-- IMAGE SGN
WORD ERROR < E
WORD GOGE < F : FIN
WORD FOND < G : ENTREE DU FOND OU "GROUND"
WORD ERROR < H
WORD ERROR < I
WORD ERROR < J
WORD INFK < K : ENTREE CTTE TRANSFORMATION
WORD ERROR < L
WORD PMASKD < M : BASCULE DE 'IMASKD'.
WORD NAME < N : NOMME L'IMAGE RESIDENTE
WORD ERROR < O
WORD ERROR < P
WORD ERROR < Q
WORD CONTO < R : REMPLISSAGE
WORD ERROR < S
WORD TOPOLO < T : ENTREE DES CONNEXITES
WORD ERROR < U
WORD ERROR < V
WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI
WORD ERROR < X
WORD ERROR < Y
WORD ERROR < Z
REPZ: VAL $-KOM-1 < DERNIERE COMMANDE.
PAGE
PROG
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 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
<
<
< 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
<
< NOTA IMPORTANT :
< ON NE REVIENT PLUS A
< "!CDA" A CAUSE DE 'PSIMUL'
< AFIN QU'IL CONSERVE LA
< 'CDAG'...
<
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
WORD COMON+128 < C=BASE DU COMMON...
STZ XCTCDA < AU CAS OU UN MALHEUREUX ALT-MODE...
< INUTILE EN FAIT ICI...
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 $
LAI AMCDAI-ZERO
BSR ACCI < ENVOI DE !CDAI...
JNE GOGE < ET BIEN CELA NE MARCHE PAS...
STZ IMASKO < MISE DU MASQUE OFF A PRIORI...
LAI NSPDAT
SBT 0
ACTD 1 < B=ADRESSE DE LA DATE,
ADRI 5,B
STB SECRDN < ADRESSE DES SECONDES...
LAD DEMMEM
SVC 0 < PASSAGE A 16 K...
LAI '18
WORD '1E15
LR B,X < X=ORIGINE DE LA '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
XWOR%7: VAL 0
BSR APIN
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 $
LRM W
WORD IMAG < W=BASE DE L'IMAGE ROUGE...
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
XWOR%7: VAL 0
BSR APIN < ENTREE DE LA COMMANDE...
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 $
<
<
< 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
<
<
< 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.
AD XCTCDA < POUR PERMETTRE UN ACCES A 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'...
AD XCTCDA < POUR ATTEINDRE TV1/TV2...
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
<
<
< C L I G N O T E M E N T D ' U N P O I N T :
<
<
< ARGUMENT :
< (X,Y)=POINT COURANT.
<
<
CLIGN: EQU $
PSR A,B,X,Y
STX XR < ON SE PLACE
STY YR
STX XS
STY YS < AU POINT COURANT...
BSR ASPGPS < (A)=NIVEAU(X,Y)...
PSR A < AND SAVE IT...
LXI 4 < (X)=NOMBRE DE CLIGNOTEMENTS...
CLIGN1: EQU $
PSR X
LAI NIVMAX < ON AFFICHE UN POINT BLANC,
BSR ASPRPS < ET ON VISUALISE...
LXI 0
CLIGN2: EQU $
HALT < ON ATTEND UN PEU...
CPZR X
JNE CLIGN2
LAI NIVMAX)NIVMAX < ON AFFICHE UN POINT NOIR,
BSR ASPRPS < ET ON VISUALISE...
LXI 0
CLIGN3: EQU $
HALT < ET ON ATTEND UN PEU...
CPZR X
JNE CLIGN3
PLR X
JDX CLIGN1 < ET ON RECOMMENCE...
PLR A
BSR ASPRPS < PUIS ON RESTAURE LE POINT COURANT...
PLR A,B,X,Y
RSR
PAGE
<
<
< 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
<
<
< G E N E R A T E U R A L E A T O I R E :
<
<
< ARGUMENT :
< (X,Y)=COORDONNEES X ET Y DU POINT COURANT...
<
<
SPRDN: EQU $
PSR B
LA RDN < GENERATION DE NOMBRES ALEATOIRES :
EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE...
MP RDN1
SCRD RDN3
JANE SPMOYC
LR B,A
JANE SPMOYC
LA KRDN1
ADRI XKRDN1,A
SCRS XKRDN2
STA KRDN1 < PROGRESSION DE 'KRDN1'...
SPMOYC: EQU $
EORR X,A
EOR XRDN
STA RDN
DC RDN8
LA RDN9 < A=RDN9 A PRIORI...
JNE SPRDN1 < ET BIEN OUI... CE N'EST PAS L'HEURE...
LA RDN7 < C'EST L'HEURE D'ALLER CHERCHER
STA RDN8 < LA SECONDE COURANTE ??!?!??!
LA SECRDN
ACTD 1 < B=SECONDE COURANTE,
LR B,A
STA RDN9 < ET MEMORISATION...
SPRDN1: EQU $
EOR RDN
STA RDN
LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
MP RDN5
EOR POINTS
SCRD RDN6
JANE SPMOYF
LR B,A
JANE SPMOYF
LA KRDN2
ADRI -XKRDN2,A
SCRS XKRDN1
STA KRDN2 < PROGRESSION DE 'KRDN2'...
SPMOYF: EQU $
EORR Y,A
STA RDN4
EOR RDN
PLR B
RSR
PAGE
PAGE
<
<
< A C C E S A U C C I :
<
<
GOCCI: EQU $
QUIT 1 < ACCES AU CCI INTERACTIF...
BR ALOOP
PAGE
<
<
< E N T R E E D ' U N C A R A C T E R E :
<
<
< ARGUMENT :
< A=ADRESSE D'UN MESSAGE SI 'PIN'...
<
<
< RESULTAT :
< A=CARACTERE ENTRE.
<
<
IF MODE-VISU,XWOR%7,,XWOR%7
PIN: EQU $
BSR APRINT
XWOR%7: VAL 0
IN: EQU $
LAD DEMIN
BSR AENTER
LBY &AREP < A=CARACTERE REPONSE.
RSR
PAGE
<
<
< E N T R E E D ' U N N O M B R E H E X A D E C I M A L
< E T C O N V E R S I O N :
<
<
< ARGUMENT :
< A=ADRESSE D'UN MESSAGE SI 'PIHEX'...
<
<
< RESULTAT :
< VOIR 'HEX'...
<
<
IF MODE-VISU,XWOR%7,,XWOR%7
PIHEX: EQU $
BSR APRINT
XWOR%7: VAL 0
IHEX: EQU $
LAD DEMHEX
BSR AENTER
BSR AHEX < A=NOMBRE HEXADECIMAL, ET CODES CONDITION.
RSR
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
XWOR%7: VAL 0
BSR AIFLOT < ENTREE DE FK...
JE INFK < 'K' DOIT ETRE NON NULLE...
FST FK < OK...
BR ALOOP
PAGE
<
<
< M O U V E M E N T S R E S I D E N T <--> T V :
<
<
DEMTV: WORD TVDKU < DEMANDE D'ENVOI D'UNE IMAGE DE 'TV'
< EN MODE ENTRELACE ; CETTE DEMANDE EST
< MISE ICI, ET NON PAS EN BAS, CAR IL
< N'Y A PAS DE PLACE DANS LA RACINE DE
< L'OVERLAY !!!
WORD IMAGE-ZERO*NOCMO
WORD LIMAG*NOCMO*NCOOL
WORD 0
MOV0: EQU $ < RESIDENT R+V+B --> TV.
LRM A
WORD DEMTV
JMP MOVX < VERS L'ENVOI DE L'IMAGE...
MOV3: EQU $ < RESIDENT B --> TV.
LAD DEMTVB
MOVX: EQU $
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
<
<
< A C C E S A T V 2 :
<
<
STV2: EQU $
LRM A,B,X
WORD TV2
WORD IMAGE
WORD LIMAG*NCOOL
WCDA
BR ALOOP
GTV2: EQU $
LRM A,B,X
WORD TV2
WORD IMAGE
WORD LIMAG*NCOOL
RCDA
BR ALOOP
PAGE
<
<
< E N T R E E D ' U N E C O N S T A N T E F L O T T A N T E :
<
<
< ARGUMENT :
< A=ADRESSE D'UN MESSAGE EN MODE 'VISU'.
<
<
< RESULTAT :
< A,B=CONSTANTE FLOTTANTE.
< INDICATEURS POSITIONNES PAR 'FCAZ'.
<
<
IFLOT: EQU $
PSR X,Y
IF MODE-VISU,XWOR%7,,XWOR%7
LR A,X < X=SAUVEGARDE DE L'ADRESSE MESSAGE.
IFLOT1: EQU $
LR X,A < A=ADRESSE DU MESSAGE A EDITER...
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
IFLOT1: EQU $
XWOR%7: VAL 0
BSR APIHEX < ENTREE DU NUMERATEUR,
JNE IFLOT1 < ERREUR...
LR A,Y < Y=NUMERATEUR.
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSLAS-ZERO
XWOR%7: VAL 0
BSR APIHEX < ENTREE DU DENOMINATEUR,
JNE IFLOT1 < ERREUR...
JAE IFLOT1 < IL NE PEUT ETRE NUL !!!
FLT
FST FWORK < DENOMINATEUR,
LR Y,A
FLT < NUMERATEUR,
FDV FWORK < RESULTAT=NUMERATEUR/DENOMINATEUR.
FCAZ < ????
PLR X,Y
RSR
PAGE
<
<
< E N T R E E U N E C O O R D O N N E E :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< A=COORDONNEE (X OU Y).
<
<
COORD1: EQU $ < RETOUR EN ERREUR.
LR B,A < RESTAURE A=@MESSAGE.
COORD: EQU $
PSR X,Y
LR A,B < SAVE B=@MESSAGE.
BSR APIHEX < ENTREE D'UNE COORDONNEE...
PLR X,Y
JNE COORD1 < ERREUR : ON RECOMMENCE.
JAL COORD1 < COORDONNEE<0 : ERREUR..
CPI X20-1 < DEBORDEMENT : ERREUR...
JG COORD1 < ERREUR...
RSR < OK, (A)=VALEUR HEXA.
PAGE
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,W
LR A,W
ADR A,A
ADRI 1,A < CALCUL DE L'ADRESSE OCTET DU MESSAGE.
STA DEMOUT+1
LBY 0,W < ACCES A LA LONGUEUR...
STA DEMOUT+2
LAD DEMOUT
SVC 0 < ENVOI DU MESSAGE...
PLR A,X,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 : ETOUR 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
<
<
< B A S C U L E D E ' I M A S K D ' :
<
<
PMASKD: EQU $
LA IMASKD
IBT NBITMO-1
STA IMASKD < ET VOILA LA BASCULE...
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< E N T R E E D ' U N E C O N S T A N T E
< D E T R A V A I L :
<
<
GCT: EQU $
BSR AIHEX < ENTREE DU NUMERO :
JNE GCT < ERREUR...
JAL GCT < ERREUR...
CPI NCT
JGE GCT < ERREUR...
ADR A,A
LR A,X < X=INDEX DOUBLE-MOT DE LA CONSTANTE...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MCT-ZERO
XWOR%7: VAL 0
BSR AIFLOT < ENTREE DE LA CONSTANTE...
FST &ACT < ET MEMORISATION...
BR ALOOP
PAGE
<
<
< D E F I N I T I O N D E L A S P I R A L E :
<
<
DSPIR: EQU $
<
< NOMBRE DE POINTS :
<
DSPIR1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MN-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL :
JNE DSPIR1 < ERREUR DE SYNTAXE...
JALE DSPIR1 < ERREUR...
CPI NCT
JG DSPIR1 < ERREUR...
STA NPM < OK, ON LE MEMORISE EN ENTIER,
FLT
FST FNP < ET EN FLOTTANT...
<
< PAS DE PARCOURS :
<
DSPIR2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MP-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL :
JNE DSPIR2 < ERREUR DE SYNTAXE...
JALE DSPIR2 < ERREUR...
STA PASQ < TOUT NOMBRE POSITIF EST ACCEPTE...
<
< "MODE DE TRACE" :
<
DSPIR3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MT-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL :
JNE DSPIR3 < ERREUR DE SYNTAXE...
CPI 1 < ET VALIDATION...
JE DSPIR4 < OK...
CPI -1
JE DSPIR4 < OK...
JANE DSPIR3 < ERREUR...
DSPIR4: EQU $
STA MODET < OK (-1,0,+1)...
<
< FIN DE DEFINITION DE LA SPIRALE :
<
BR ALOOP < VERS LA BOUCLE DE L'INTERPRETEUR.
PAGE
<
<
< E N T R E E D U T R A M A G E :
<
<
TRAME: EQU $
ERDN1: EQU $
STZ DRDN
STZ MRDN < PAS D'ALEATOIRE A PRIORI...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI M10-ZERO
BSR APRINT < EDITION DU MESSAGE...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXAS ET CONVERSION.
JNE ERDN1 < ERREUR...
JAE ERDN6 < PAS D'ALEATOIRE... (MRDN=DRDN=0)
STA MRDN < MULTIPLICATEUR,
IF MODE-VISU,XWOR%7,,XWOR%7
LAI M11-ZERO
BSR APRINT < EDITION DU MESSAGE...
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXAS ET CONVERSION.
JNE ERDN1 < ERREUR...
STA DRDN < ET DIVISEUR :
< ON RENTRE UN NOMBRE COMPRIS ENTRE
< 1 ET 255 ; LORSQUE LE NOMBRE ALEATOIRE
< CALCULE EST DIVISIBLE PAR 'DRDN', ON
< TRACE LE POINT COURANT PAR 'SETV' ;
< LORSQUE DRDN=1, TOUS LES POINTS SONT
< TRACES...
CP MRDN
JL ERDN1 < IL FAUT M<=D...
ERDN6: EQU $
< NOTA : DRDN=0 EQUIVAUT A DRDN=1...
BR ALOOP < ET VERS L'INTERPRETEUR...
PAGE
<
<
< D E F I N I T I O N D U B O R D :
<
<
BORD: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MBORD-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXAS ET CONVERSION.
JNE BORD < ERREUR DE SYNTAXE...
JAE BORD < ERREUR : IL FAUT AU MOINS UN NIVEAU...
LB LNIVI < ACCES A LA LISTE MAXIMALE INVERSEE,
ANDR A,B
CPZR B < Y-A-T'IL DES NIVEAUX INEXISTANTS ???
JNE BORD < OUI, ERREUR...
STA NBORD < ET MEMORISATION DE LA LISTE...
BR ALOOP < VERS LA BOUCLE DE L'INTERPRETEUR...
PAGE
<
<
< D E F I N I T I O N D E L A C O U L E U R
< D E R E M P L I S S A G E :
<
<
COLOR: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MCOLOR-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXAS ET CONVERSION.
JNE COLOR < ERREUR DE SYNTAXE...
JAL COLOR < ERREUR DE NIVEAU...
CPI NIVMAX
JG COLOR < ERREUR DE NIVEAU...
STA NCOLOR < ET MEMORISATION...
BR ALOOP < VERS LA BOUCLE DE L'INTERPRETEUR...
PAGE
<
<
< D E F I N I T I O N D U F O N D :
<
<
FOND: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MFOND-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXAS ET CONVERSION.
JNE FOND < ERREUR DE SYNTAXE...
JAE FOND < ERREUR : IL FAUT AU MOINS UN NIVEAU...
LB LNIVI < ACCES A LA LISTE MAXIMALE INVERSEE,
ANDR A,B
CPZR B < Y-A-T'IL DES NIVEAUX INEXISTANTS ???
JNE FOND < OUI, ERREUR...
STA NFOND < ET MEMORISATION DE LA LISTE...
BR ALOOP < VERS LA BOUCLE DE L'INTERPRETEUR...
PAGE
<
<
< D E F I N I T I O N D E L A C O N N E X I T E :
<
<
< NOTA :
< 'AA00 : 4-CONNEXITE HORIZONTALE-VERTICALE,
< '5500 : 4-CONNEXITE DIAGONALE,
< 'FF00 : 8-CONNEXITE.
<
<
TOPOLO: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI MTOPO-ZERO
BSR APRINT < ENVOI D'UN MESSAGE,
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE LA CONNEXITE :
JNE TOPOLO < ERREUR DE SYNTAXE...
JAE TOPOLO < ERREUR : IL FAUT AU MOINS UN LIEN...
LB IVALXY < POUR VALIDER (A) :
ANDR A,B
CPZR B < ALORS ???
JNE TOPOLO < ERREUR : LIENS INCONNUS...
STA LVALXY < ET MEMORISATION DE LA LISTE DES
< LIENS (DANS LE SENS TRIGONOMETRIQUE).
BR ALOOP < VERS LA BOUCLE D'INTERPRETATION...
PAGE
<
<
< R E M P L I S S A G E D ' U N C O N T O U R :
<
<
CONTO: EQU $
<
< R E C U P E R A T I O N P O I N T
< D E D E P A R T :
<
CUR1: EQU $
IF MODE-ITEM,XWOR%7,,XWOR%7
BSR AIN < (A)=COMMANDE "R" OU "0"..."7".
XWOR%7: VAL 0
IF MODE-VISU,XWOR%7,,XWOR%7
LAD OG
SVC 0 < OPEN GRAPHIQUE.
LAD CU
SVC 0 < MISE EN FONCTION CURSEUR.
LAD LCU
SVC 0 < LECTURE DU CURSEUR.
<
< NOTA :
< ON NE TESTE PAS LES ERREURS
< EN RETOUR (CAS DU PASSAGE EN
< BATCH...), CAR 'CURSOR' EST INITIALISE
< PAR 'N'.
<
LA CURSOR+1 < Y(CURSEUR).
MP C4 < POUR ATTEINDRE
DV C3 < TOUTE LA VIDEO...
SLRS DEDY < REDUCTION VIDEO.
SB NLIN < LES AXES GRAPHIQUES ET
< VIDEOS SONT INVERES.
NGR A,Y < Y=Y(CURSEUR VIDEO).
LA CURSOR+2 < X(CURSEUR).
SLRS DEDX < REDUCTION VIDEO.
LR A,X < X=X(CURSEUR VIDEO).
BSR ACLIGN < CLIGNOTEMENT DU POINT (X,Y).
LBY CURSOR < A=COMMANDE ASSOCIEE.
<
< COMMANDES RECONNUES :
< C : CLIGNOTEMENT DU CURSEUR,
< R : ENTREE DU POINT DE DEPART ET "REMPLISSAGE",
< 0-7 : ENTREE DE LA COULEUR DU POINT DE DEPART (ON
< PARTIRA DU PREMIER POINT RENCONTRE PAR BALA-
< YAGE RASTER POSSEDANT CETTE COULEUR).
<
CPI "C"
JE CUR1 < CLIGNOTEMENT SEUL...
XWOR%7: VAL 0
CPI "0"
JL CUR1 < ERREUR...
CPI NIVMAX='FA00('00FF
JLE CUR2 < DEPART SUR UN POINT DE COULEUR DONNEE...
CPI "R"
JNE CUR1 < RIEN COMPRIS, ON RECOMMENCE.
IF MODE-ITEM,XWOR%7,,XWOR%7
<
< ENTREE EN HEXA DES COORDONNEES :
<
BSR ACOORD < ENTREE DE X.
LR A,X < X=X(CURSEUR VIDEO).
BSR ACOORD < ENTREE DE Y.
LR A,Y < Y=Y(CURSEUR VIDEO).
XWOR%7: VAL 0
<
< ON A UN POINT DE DEPART :
<
CUR3: EQU $
STZ KSSTAC < REINITIALISATION A PRIORI DU POINTEUR
< DE LA PILE VIRTUELLE...
BSR AREMP < REMPLISSAGE DE (X,Y).
<
< FIN DE REMPLISSAGE :
<
CUR4: EQU $
BR ALOOP < VERS LA BOUCLE DE L'INTERPRETEUR...
<
< RECHERCHE D'UN POINT DE
< DEPART, QUI EST LE PRE-
< MIER POINT D'UNE COULEUR
< DONNEE EN ARGUMENT :
<
CUR2: EQU $
ADRI -"0",A < CONVERSION EN UN NIVEAU...
STA SCOLOR < (A)=COULEUR DU POINT DE DEPART CHERCHE.
LYI 0 < Y=ORDONNEE.
STY YR
CUR11: EQU $
LXI 0
STX XR < X=ABSCISSE.
CUR12: EQU $
CPZ IMASKD < LE CHOIX EST-IL MASQUABLE ???
JNE CUR18 < NON, ALLONS TESTER...
CPZ IMASKO
JE CUR18 < 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 CUR15 < LE MOT (X,Y) EST MASQUE...
CUR18: EQU $
BSR ASPGPR < (A)=NIVEAU(XR,YR) :
CP SCOLOR < EST-CE LA COULEUR CHERCHEE ???
JNE CUR13 < NON...
LA NFOND < OUI : ON VA S'ARRETER ICI, MAIS
< AU PREALABLE, ON VA LUI METTRE
< UNE DES COULEURS DU FOND...
DBT < RECHERCHE DE LA PREMIERE COULEUR
< APPARTENANT AU FOND,
LR X,A
BSR ASPRPR < QUE L'ON DONNE A (XR,YR)...
LX XR < ET ON SE POSITIONNE
LY YR < SUR CE POINT DE DEPART...
JMP CUR3 < ET C'EST PARTI...
CUR13: EQU $
CUR15: EQU $
IC XR < ET DE XR,
LA XR
CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ???
JLE CUR12 < NON... BALAYAGE HORIZONTAL...
IC YR < OUI : PROGRESSION DE 'YR'...
LA YR
CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ???
JLE CUR11 < NON, BALAYAGE VERTICAL...
JMP CUR4 < OUI : ON N'A PAS TROUVE DE POINT
< DE DEPART DE LA COULEUR ARGUMENT,
< ON ABANDONNE DONC...
PAGE
<
<
< R E M P L I S S A G E R E C U R S I F :
<
<
< FONCTION :
< CE MODULE TESTE LE POINT
< ARGUMENT (X,Y) ; S'IL APPAR-
< TIENT AU FOND RESIDENT, IL EST
< MARQUE EN RESIDENT ET ALEATOIRE-
< MENT EN SCRACTH AFIN DE CREER
< UNE TRAME. ON EST OBLIGE DE
< MARQUER LE RESIDENT, CAR EN
< EFFET LA TRAME ALEATOIRE DU
< SCRATCH EST TROUEE, ET LE TEST
< D'APPARTENANCE AU FOND S'Y
< PERDRAIT...
<
<
< ARGUMENT :
< (X,Y)=POINT COURANT.
<
<
REMP: EQU $
<
< TEST DES OVER-SCREEN :
<
LR X,A < TEST DE 'X' :
JAL REMP1 < HORS-ECRAN : ARRET DE LA RECURSIVITE...
CPI NPOLM1
JG REMP1 < HORS-ECRAN : ARRET DE LA RECURSIVITE...
LR Y,A < TEST DE 'Y' :
JAL REMP1 < HORS-ECRAN : ARRET DE LA RECURSIVITE...
CPI NLIGM1
JG REMP1 < HORS-ECRAN : ARRET DE LA RECURSIVITE...
<
< ACCES A UNE VALEUR "PONDEREE"
< EN SPIRALE DU POINT (X,Y) :
<
STX XR
STY YR
BSR ASPGPR < (A)=NIVEAU(XR,YR),
CP NCOLOR < LE POINT (XR,YR) EST-IL DEJA MARQUE ???
JE REMP1 < OUI, ON L'IGNORE, ET ON ARRETE ICI LA
< RECURSIVITE...
LR A,B < NON :
< (B)=NIVEAU(XR,YR)...
PSR A < SAVE LE NIVEAU REEL DE (XR,YR)...
LA NPM
CPI NP0 < LA SPIRALE FAIT-ELLE 1 POINT ???
JE REMP20 < OUI, (A) EST BON...
BSR ASPIR < NON, ALLONS SOMMER AUTOUR DE (XR,YR)
< DANS L'IMAGE 'TV2'...
LR A,B < (B)=NIVEAU PONDERE AUTOUR DE (XR,YR),
< LE POINT (XR,YR) Y COMPRIS.
REMP20: EQU $
PLR A < (A)=NIVEAU REEL DE (XR,YR)...
PSR X < SAVE LA COORDONNEE 'X',
LR A,X < (X)=NIVEAU(XR,YR),
LA NBORD
TBT 0,X < LE POINT (X,Y) APPARTIENT-IL AU BORD ???
PLR X < RESTAURATION DE LA COORDONNEE 'X'...
JC REMP1 < OUI, ON ARRETE LA RECURSIVITE...
<
< CAS D'UN POINT QUI N'EST
< PAS AU BORD :
<
LA NCOLOR < (A)=COULEUR DE REMPLISSAGE...
BSR ASPRPR < ON MARQUE TOUT POINT QUI N'APPARTIENT
< AU BORD, AFIN DE NE PAS PERTURBER LA
< RECURSIVITE A CAUSE :
< 1 - DU TRAMAGE (QUI CREE DES TROUS) DU
< SCARTCH,
< 2 - DES CAS OU LES LISTES DU 'BORD'
< ET DU 'FOND' NE SONT PAS COMPLEMENTAIRES,
< CE QUI CREE DES TROUS AUSSI...
PSR X < SAVE LA COORDONNEE 'X' :
LR B,X < (X)=NIVEAU(XR,YR),
LA NFOND
TBT 0,X < LE POINT (X,Y) APPARTIENT-IL AU FOND ???
PLR X < RESTAURATION DE LA COORDONNEE 'X'...
JNC REMP2 < NON, ON L'IGNORE ET ON PASSE AUX POINTS
< VOISIN ORTHOGONALEMENT...
<
< UTILISATION DU MASQUE :
<
CPZ IMASKO
JE REMP8 < LE MASQUE EST OFF...
PSR X,Y < LE MASQUE EST ON :
< (X,Y)=COORDONNEES 'X' ET 'Y' DU POINT
< COURANT.
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 REMP2 < LE MOT (X,Y) EST MASQUE, ON L'IGNORE, ET
< ON PASSE A SES VOISINS...
REMP8: EQU $
<
< CAS D'UN POINT QUI EST
< SUR LE FOND ET NON MASQUE :
<
LA DRDN
CPI 1
JLE REMP3 < DANS CE CAS, ON TRACE SYSTEMATIQUEMENT...
< (POUR DRDN=1, ON TROUVERAIT TOUJOURS UN
< NOMBRE DIVISIBLE PAR 1...)
LA MRDN
STA XRDN < INITIALISATION DU MULTIPLICATEUR
< COURANT...
REMP5: EQU $
BSR ARDN < CALCUL D'UN NOMBRE ALEATOIRE,
SARD NBITMO
DV DRDN
CPZR B < EST-IL DIVISIBLE PAR 'DRDN' ???
JE REMP4 < OUI, ON LE TRACE...
DC XRDN < NON, ITERONS SUR 'RDN' :
JG REMP5 < OUI...
JMP REMP6 < NON, ON NE TRACE DONC PAS CE POINT...
REMP4: EQU $
REMP3: EQU $
<
< GENERATION DE LA TRAME :
<
STX XS
STY YS
LA NCOLOR < (A)=COULEUR DE REMPLISSAGE,
BSR ASPRPS < ET MARQUAGE DU POINT (XS,YS)...
REMP6: EQU $
<
< ACCES AUX 4-VOISINS :
<
REMP2: EQU $
LAI 0 < (A)=NUMERO DU VOISIN COURANT, SACHANT
< QUE L'ON VA DANS LE SENS TRIGONO-
< METRIQUE...
REMP30: EQU $
XR A,X < (X)=INDEX DES LISTES D'INCREMENT.
AD &AINCX < MODIFICATION DE LA COORDONNEE 'X',
XR A,Y
AD &AINCY < MODIFICATION DE LA COORDONNEE 'Y',
XR A,Y
LB LVALXY < (B)=LISTE DE VALIDATION DES VOISINS...
TBT NBITMO,X < LE VOISIN COURANT EST-IL A TESTER ???
XR A,X < RESTAURE :
< (A)=NUMERO DE VOISIN COURANT,
< (X,Y)=COORDONNEE DE CELUI-CI...
JNC REMP31 < NON, ON PASSE AU SUIVANT...
BSR ASPSTA < OUI, ON LE PREND EN COMPTE,
JMP REMP < ET ON VA LE TRAITER...
REMP31: EQU $
ADRI 1,A < PASSAGE AU VOISIN SUIVANT...
CPI NREMP+1 < EST-CE FINI ???
< (ON FAIT +1, AFIN DE REVENIR SUR LE
< POINT CENTRAL...)
JL REMP30 < NON, PASSAGE AU VOISIN SUIVANT (OU
< RETOUR AU POINT CENTRAL)...
DREMP:: VAL NREMP=0 < ET DECALAGE D'ACCES...
IF NBITMO/DREMP(0='FD00,,XEIF%,
DREMP: VAL DREMP+1 < RECHERCHE D'UN DIVISEUR DE 'NBITMO'...
XEIF%: VAL 0
IF NBITMO/DREMP(0='FD00,,XEIF%,
IF ATTENTION : 'DREMP' EST MAUVAIS !!!
XEIF%: VAL 0
XWOR%1: VAL NLIG < NOMBRE DE LIGNES,
XWOR%2: VAL NPOLM1+1 < NOMBRE DE POINTS,
XWOR%3: VAL NBITMO/DREMP < NOMBRE D'APPELS MEMORISES DANS UN MOT.
XWOR%4: VAL XWOR%1/XWOR%3*XWOR%2
< NOMBRE DE MOTS NECESSAIRES POUR UN
< MAXIMU D'APPELS (TOUS LES POINTS).
XWOR%5: VAL SSTACK+XWOR%4 < TOP DE LA PILE VIRTUELLE...
<
< FIN DE LA RECURSIVITE :
<
REMP1: EQU $
LA KSSTAC < (A)=POINTEUR COURANT DE LA PILE :
JAE REMP9 < C'EST FINI... ON RETOURNE A L'APPELANT...
DC KSSTAC < NON, ON DEPILE DONC...
PSR X < SAUVEGARDES...
LBI 0 < CLEAR 'B' (SUITE DU SUPER-BUG...).
SLRD NBITMO/DREMP=0 < DECONCATENATION :
< (A)=ADRESSE RELATIVE DANS LA PILE,
< (B)=NUMERO DE ZONE,
AD ASSTAC < (A)=ADRESSE ABSOLUE EN 'CDAI',
PSR B
LB AMSSTA < (B)=ADRESSE DE RECEPTION,
LXI 1 < (X)=NOMBRE DE MOTS A DEPLACER.
RCDA
PLR B < RESTAURATION DU NUMERO DE ZONE,
LAI 0
SLLD NBITMO=0 < QUE L'ON CONVERTIT EN UN DECALAGE...
LR A,X
LA MSSTAC < (A)=MOT COURANT DE LA PILE,
SCLS DREMP,X < QUE L'ON CADRE,
ANDI BIT>DREMP-BIT < ET CE QUI NOUS DONNE LE NUMERO DE
< L'APPEL DU TYPE "XREMP..." :
< D'OU LES RETOURS SIMULES...
PLR X
CPI NREMP < VALIDATION...
JL REMP31 < OK, AU VOISIN SUIVANT...
QUIT 1 < E R R E U R P R O G R A M M E ...
REMP9: EQU $
RSR < RETOUR REEL A L'APPELANT...
PAGE
<
<
< E X P L O R A T I O N D ' U N E S P I R A L E :
<
<
< FONCTION :
< CE MODULE ICI A CAUSE DES
< SAUTS SUPERIEURS A 128 MOTS
< PERMET DE CALCULER LE NIVEAU
< PONDERE PAR LES COEFFICIENTS
< 'A' AUTOUR DU POINT COURANT.
< MAIS, ATTENTION, LE NIVEAU
< PONDERE EST CALCULE A PARTIR
< DE 'TV2' QUE L'ON SUPPOSE
< INITIALEMENT IDENTIQUE A
< L'IMAGE CONTENUE DANS 'TV1' ;
< LA DIFFERENCE ENTRE LES 2 EST
< QUE 'TV1' VA ETRE MODIFIE AU
< COURS DE L'OPERATION, ALORS
< QUE 'TV2' RESTE INTACTE...
<
<
< ARGUMENTS :
< (X,Y)=POINT COURANT.
<
<
< RESULTAT :
< (A)=NIVEAU PONDERE (0-7).
<
<
SPIR: EQU $
PSR B,X,Y
<
< INITIALISATION DE LA SPIRALE :
<
LA XR
LB YR
PSR A,B < SAUVEGARDE DU POINT (XR,YR).
FLD F0
FST 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...
LA XR
LB YR
STA XS
STB YS < (XS,YS) <-- (XR,YR) COURANT.
LA CTCDA
STA XCTCDA < AFIN D'ACCEDER A 'TV2'...
BSR ASPGPS < (A)=NIVEAU(XS,YS) DANS 'TV2'.
STZ XCTCDA < ET RETOUR A 'TV1'...
FLT < NIVEAU DU POINT COURANT,
LX NP < (X)=NUMERO DU POINT COURANT (DE 1 A NPM),
ADRI -1,X < POUR COMMENCER A 0...
ADR X,X < POUR OBTENIR UN INDEX FLOTTANT...
FMP &ACT < ET ON PONDERE LE NIVEAU PAR CT(X),
FAD CUMUL
FST CUMUL < PUIS ON CUMULE...
SPMOY4: EQU $
LA XR
AD DELTAX < CHANGEMENT DE
STA XR
LA YR
AD DELTAY < POINT COURANT (XS,YS).
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 NIVEAU "PONDERE"
< DU POINT (X,Y)=(XR,YR) :
<
SPMOY3: EQU $
PLR A,B
STA XR < RESTAURATION DE
STB YR < (XR,YR)...
FLD CUMUL < VALEUR DU SIGMA,
FDV FNP < NORMALISATION,
FDV DCUMUL < ET REDUCTION EVENTUELLE PAR 'K'...
BSR AROND
CPZ MODET < QUEL EST LE MODE DE TRACE ???
JNE SPMOY6 < PAR SEUILLAGE...
ANDI NIVMAX < PAR MODULO...
JMP SPMOY7 < VERS LA GENERATION...
SPMOY6: EQU $
JAG SPMOY9 < LE NIVEAU N'EST PAS NOIR...
LAI 0 < NOIR, OU NEGATIF --> NOIR...
JMP SPMOY7 < VERS LE TRACE...
SPMOY9: EQU $
CPI NIVMAX
JLE SPMOY7 < ON EST DANS L'INTERVALLE (0,NIVMAX)...
CPZ MODET < HORS DE CET INTERVALLE, QUEL EST LE
< MODE DE TRACE ???
LAI 0 < A PRIORI : NIVEAU>NIVMAX --> NOIR...
JL SPMOY7 < ET OUI, VERS LA GENERATION...
LAI NIVMAX < ET NON : NIVEAU>NIVMAX --> NIVMAX...
SPMOY7: EQU $
<
< RETOUR :
<
PLR B,X,Y
RSR
PAGE
<
<
< S I M U L A T I O N D E S ' B S R ' :
<
<
< FONCTION :
< EN EFFET, LA PILE RESIDENTE
< NE SUFFIT PAS : ON DOIT DONC
< SIMULER LES 'BSR' RECURSIFS
< DANS UNE PILE DANS LAQUELLE ON
< PLACE DES NUMEROS D'APPELS LES
< PLUS PETITS POSSIBLES ("XREMP...").
<
<
< ARGUMENT :
< (A)=NUMERO D'APPEL ("XREMP...").
<
<
SPSTAC: EQU $
CPI BIT>DREMP-BIT < VALIDATION :
JLE SPSTA2 < OK...
QUIT 1 < E R R E U R P R O G R A M M E ...
SPSTA2: EQU $
<
< PROGRESSION DU POINTEUR DE PILE :
<
IC KSSTAC < LE PSEUDO-POINTEUR PROGRESSE :
JNE SPSTA1 < OK...
QUIT 1 < LORSQU'IL REPASSE PAR 0, IL Y A DEBOR-
< DEMENT DE LA PILE VIRTUELLE...
SPSTA1: EQU $
<
< ACCES A L'ENTREE-MOT
< COURANTE :
<
PSR A,B,X,Y
LR A,Y < (Y)=NUMERO D'APPEL...
LA KSSTAC < (A)=PSEUDO-POINTEUR COURANT :
LBI 0 < CLEAR 'B' (OUFFF... BUG PAS FACILE !!!).
SLRD NBITMO/DREMP=0 < QUE L'ON DECONCATENE :
< (A)=ADRESSE RELATIVE EN 'CDAI',
< (B)=NUMERO DE ZONE.
AD ASSTAC < (A)=ADRESSE ABSOLUE EN 'CDAI',
PSR A < QUE L'ON MEMORISE...
STZ MSSTAC < A PRIORI (AU CAS OU (B)=0)...
CPZR B < EST-CE LA PREMIERE ZONE D'UN MOT QUE
< L'ON VA ECRIRE ???
JE SPSTA3 < OUI, PAS DE 'RCDA', AINSI : CELA VA UN
< PEU PLUS VITE, MAIS SURTOUT, ON EVITE DES
< PARITES MEMOIRE AU CAS OU LA 'CDAI'
< AURAIT ETE MISE HORS-TENSION...
PSR B < SAUVEGARDE DU NUMERO DE ZONE.
LB AMSSTA < (B)=ADRESSE DU MOT COURANT EN RESIDENT,
LXI 1 < (X)=NOMBRE DE MOTS A DEPLACER,
RCDA
< ACCES A L'ENTREE COURANTE...
<
< MISE EN PLACE DU
< NUMERO D'APPEL :
<
PLR B < (B)=NUMERO DE ZONE :
SPSTA3: EQU $
LAI 0
SLLD NBITMO=0 < QUE L'ON CONVERTIT EN UN DECALAGE :
LR A,X
LA MSSTAC < (A)=MOT COURANT DE LA PILE :
SCLS DREMP,X < CADRAGE DE LA ZONE COURANTE,
ANDI BIT>DREMP-BIT)MFFFF
< ET NETTOYAGE,
ORR Y,A < PUIS INSERTION DU NUMERO D'APPEL...
SCRS DREMP,X < ET RECALAGE...
STA MSSTAC
<
< MISE A JOUR DE LA PILE :
<
PLR A < (A)=ADRESSE ABSOLUE EN 'CDAI',
LB AMSSTA < (B)=ADRESSE EN RESIDENT,
LXI 1 < (X)=NOMBRE DE MOTS A DEPLACER,
WCDA
< MISE A JOUR DE LA PILE...
<
< ET RETOUR :
<
PLR A,B,X,Y
RSR
PAGE
<
<
< V A L I D A T I O N D U F O R M A T D E L ' I M A G E :
<
<
IF X20-X21,,X100,
IF ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100: VAL 0
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.