NMTZ: VAL "T4"
NMP: VAL " 1"
IF NMPROC-NMTZ,,XWOR%,
IF NMPROC-NMP,,XWOR%,
IF ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%: VAL 0
IF NMPROC-NMTZ,XWOR%9,,XWOR%9
IDP "T4 - VERSION CHAMP DE VECTEURS 3D DE TW"
XWOR%9: VAL 0
IF NMPROC-NMP,XWOR%9,,XWOR%9
IDP " 1 - VERSION DE 'T4' 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-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...
PROG
PAGE
<
<
< M E S S A G E S :
<
<
MMCDA: BYTE 5;'6D
MCDAI: ASCI "!CDA"
BYTE "I";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="
MH: BYTE 3;'6D
ASCI "H="
MCT: BYTE 1;"="
MNMOD: BYTE 7;'6D
ASCI "N-MOD?"
MN: BYTE 3;'6D
ASCI "N="
MECL: BYTE 6;'6D
ASCI "LITE?"
MESX: BYTE 4;'6D
ASCI "SX= "
MESY: BYTE 4;'6D
ASCI "SY= "
MESZ: BYTE 4;'6D
ASCI "SZ= "
MPROJ: BYTE 3;'6D
ASCI "P="
MODM: BYTE 6;'6D
ASCI "MODE= "
MASKO: BYTE 9;'6D
ASCI "MASK ON?"
MSLAS: BYTE 1;"/"
MTRX: BYTE 4;'6D
ASCI "CX= "
MTRY: BYTE 4;'6D
ASCI "CY= "
MZR: BYTE 4;'6D
ASCI "ZR= "
MTR: BYTE 4;'6D
ASCI "TR= "
MKFU: BYTE 5;'6D
ASCI "KFU="
MKFV: BYTE 5;'6D
ASCI "KFV="
MKFW: BYTE 5;'6D
ASCI "KFW="
MKFT: BYTE 5;'6D
ASCI "KFT="
MKUX: BYTE 5;'6D
ASCI "KUX="
MKVX: BYTE 5;'6D
ASCI "KVX="
MKWX: BYTE 5;'6D
ASCI "KWX="
MKTX: BYTE 5;'6D
ASCI "KTX="
MKUY: BYTE 5;'6D
ASCI "KUY="
MKVY: BYTE 5;'6D
ASCI "KVY="
MKWY: BYTE 5;'6D
ASCI "KWY="
MKTY: BYTE 5;'6D
ASCI "KTY="
MKUZ: BYTE 5;'6D
ASCI "KUZ="
MKVZ: BYTE 5;'6D
ASCI "KVZ="
MKWZ: BYTE 5;'6D
ASCI "KWZ="
MKTZ: BYTE 5;'6D
ASCI "KTZ="
MKRX: BYTE 4;'6D
ASCI "KX= "
MKRY: BYTE 4;'6D
ASCI "KY= "
MKRZ: BYTE 4;'6D
ASCI "KZ= "
MTRANS: BYTE 7;'6D
ASCI "TRANS?"
MSENS: BYTE 6;'6D;"S";" ";"R";'08;'08
MMC: BYTE 5;'6D
ASCI "RVB?"
MMS: BYTE 6;'6D
BYTE "S";" ";"M";'08;'08
MVP: BYTE 20;'6D
ASCI "0=VECTEUR 1=POINT ? "
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
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="
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="
AMH: EQU MH < "H="
AMCT: EQU MCT < "="
AMNMOD: EQU MNMOD < "N-MOD?"
AMN: EQU MN < "N="
AMECL: EQU MECL < "ECLAIRAGE?"
AMESX: EQU MESX < "SX="
AMESY: EQU MESY < "SY="
AMESZ: EQU MESZ < "SZ="
AMZR: EQU MZR < "ZR="
AMTR: EQU MTR < "TR="
AMKFU: EQU MKFU < "KFU="
AMKFV: EQU MKFV < "KFV="
AMKFW: EQU MKFW < "KFW="
AMKFT: EQU MKFT < "KFT="
AMKUX: EQU MKUX < "KUX="
AMKVX: EQU MKVX < "KVX="
AMKWX: EQU MKWX < "KWX="
AMKTX: EQU MKTX < "KTX="
AMKUY: EQU MKUY < "KUY="
AMKVY: EQU MKVY < "KVY="
AMKWY: EQU MKWY < "KWY="
AMKTY: EQU MKTY < "KTY="
AMKUZ: EQU MKUZ < "KUZ="
AMKVZ: EQU MKVZ < "KVZ="
AMKWZ: EQU MKWZ < "KWZ="
AMKTZ: EQU MKTZ < "KTZ="
AMPROJ: EQU MPROJ < "P="
AMODM: EQU MODM < "MODE="
AMKRX: EQU MKRX < "KX="
AMKRY: EQU MKRY < "KY="
AMKRZ: EQU MKRZ < "KZ"
AMTRAN: EQU MTRANS < "TRANS?"
AMSENS: EQU MSENS < "S R"
AMMC: EQU MMC < "RVB?"
AMMS: EQU MMS < "S M"
AMVP: EQU MVP < "0=VECTEUR 1=POINT ?"
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.
AMCDA: EQU MCDA < !CDA.
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,
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...
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.
ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR).
AGRAD2: WORD GRAD2 < RELAI...
AGRD12: WORD GRAD12 < REALI...
AERROR: WORD ERROR < BRANCHEMENT EN ERREUR...
ASPTR1: WORD SPTR1 < SORTIE DU S/P DE TRANS...
APTRAN: WORD PTRANS < COEFFICIENT MATRICE 3*3.
ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE
< L'UN DES SOUS-PROGRAMMES PRECEDENTS.
ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES...
ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION.
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
IF MODE-VISU,XWOR%7,,XWOR%7
NOMBB:: VAL "8" < NOM DE LA BRANCHE D'OVERLAY.
NOMOV1:: VAL " ">NBITOC?NOMBB
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
NOMBB:: VAL "9" < NOM DE LA BRANCHE D'OVERLAY.
NOMOV1:: VAL " ">NBITOC?NOMBB
XWOR%7: VAL 0
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
DEMOVL: BYTE '80?SGNLNS;'02 < CHARGEMENT DE L'OVERLAY DE 'TZ'.
WORD OVLTZ2
WORD LOVL2
WORD -1
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
PAGE
<
<
< C O M M O N :
<
<
COMMON
COMON: WORD 0 < MOT RESERVE POUR LE BLOC FLOTTANT.
<
< ACCES AU Z-BUFFER :
<
ZBUF: WORD 0 < 0 : Z-BUFFER ACTIF (MODE NORMAL)...
< 1 : INACTIF, MAIS DANGEREUX...
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.
XZMAX:: VAL '7FFF < PLUS GRAND NOMBRE ENTIER POSITIF.
ZMAX: WORD XZMAX < PLUS GRAND NOMBRE POSITIF...
ASPDKU: WORD SPDKU < ECRITURE DU BLOC COURANT...
AGZB: WORD GZB < ACCES GENERAL AU Z-BUFFER...
<
< GESTION DE LA TRANSPARENCE :
<
LTRANS: WORD 0 < LISTE DE BITS : LE BIT DE RANG X S'IL
< EST A 1 INDIQUE QUE LE NIVEAU DE GRIS
< EGAL A X EST TRANSPARENT.
WORK2: WORD 0 < VARIABLE DE TRAVAIL.
NM1: WORD 0 < NIVEAU D'UN POINT ANTERIEUR,
NM2: WORD 0 < NIVEAU MODULE D'UN POINT POSTERIEUR.
FNIV: FLOAT 0 < NIVEAU COURANT LORS DU TRACE D'UN
< VECTEUR.
FCONS: FLOAT 0 < CONSTANTE DE PROGRESSION DE 'FNIV'.
KCOUL: WORD -1 < -1: TRACE DES VECTEURS EN DEGRADE,
< 0-7 : TRACE DES VECTEURS SUIVANT LA
< COULEUR (KCOUL).
INUL: WORD 0 < 0 : NE PAS TRACER LES VECTEURS DE NORME
< INFERIEURE A 1,
< 1 : LES TRACER...
IMODVP: WORD 0 < 0 : 'SPU', 'SPV' ET 'SPW' DONNENT DES
< COMPOSANTES DE VECTEURS,
< 1 : 'SPU', 'SPV' ET 'SPW' DONNENT DES
< COORDONNEES ABSOLUES DE POINTS.
<
< DONNEES DE DERIVATION DE LA SURFACE :
<
DXDU: FLOAT 0 < DX/DU,
DXDV: FLOAT 0 < DX/DV,
DYDU: FLOAT 0 < DY/DU,
DYDV: FLOAT 0 < DY/DV,
DZDU: FLOAT 0 < DZ/DU,
DZDV: FLOAT 0 < DZ/DV.
NX: FLOAT 0 < X(NORMALE),
NY: FLOAT 0 < Y(NORMALE),
NZ: FLOAT 0 < Z(NORMALE).
NORMN: FLOAT 0 < NORME(NORMALE).
<
< N-MODULATION :
<
IMODN: WORD 0 < 0 : PAS DE N-MODULATION,
< 1 : ON DEPLACE LE POINT (XS,YS,ZS)
< LE LONG DE LA NORMALE PROPORTION-
< NELLEMENT AU NIVEAU DU POINT (XR,YR)
< DE L'IAMGE 'TV2'...
FMODN: FLOAT 0 < CONSTANTE DE MODULATION.
<
< SOURCE LUMINEUSE :
<
IECL: WORD 0 < 0 : PAS D'ECLAIRAGE DE LA SURFACE,
< 1 : ECLAIRAGE...
SX: WORD 0 < X(SOURCE),
SY: WORD 0 < Y(SOURCE),
SZ: WORD 0 < Z(SOURCE).
MSX: FLOAT 0 < X(POINT --> SOURCE),
MSY: FLOAT 0 < Y(POINT --> SOURCE),
MSZ: FLOAT 0 < Z(POINT --> SOURCE).
NORMS: FLOAT 0 < NORME(POINT --> SOURCE).
FCOEF: FLOAT 1 < COEFFICIENT D'INTENSITE LUMINEUSE.
< (INITIALISE SUR PAS DE MODULATION)
ACOEF: WORD COEF < CALCUL DE LA MODULATION LUMINEUSE.
ANECL: WORD NECLX < RELAI...
<
< CONSTANTES UTILES :
<
XR: WORD 0 < COORDONNEE X D'UN POINT RESIDENT,
YR: WORD 0 < COORDONNEE Y D'UN POINT RESIDENT,
ZR: WORD 0 < COORDONNEE Z D'UN POINT RESIDENT,
TR: WORD 0 < COORDONNEE T 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...
SENS: WORD 0 < SENS DE LA TRANSFORMATION EN MODE
< POINT (C1) :
< 0 : R --> S,
< 1 : S --> R.
<
< 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
ASPGR: WORD SPGR < ASPGPR SI SENS=0, ASPGPS SI SENS#0.
ASPGS: WORD SPGS < ASPGPS SI SENS=0, ASPGPR SI SENS#0.
ASPRR: WORD SPRR < ASPRPR SI SENS=0, ASPRPS SI SENS#0.
ASPRS: WORD SPRS < ASPRPS SI SENS=0, ASPRPR SI SENS#0.
ARAC: WORD RAC < EXTRACTION D'UNE RACINE CARREE...
<
< SOUS-PROGRAMMES SPECIFIQUES :
<
SPUVW: EQU $
ASPU: WORD SPU < COMPOSANTE 'U' D'UN VECTEUR,
XSPU:: VAL $-SPUVW-1 < INDEX COMPOSANTE U.
ASPV: WORD SPV < COMPOSANTE 'V',
XSPV:: VAL $-SPUVW-1 < INDEX COMPOSANTE V.
ASPW: WORD SPW < ET COMPOSANTE 'W'...
XSPW:: VAL $-SPUVW-1 < INDEX COMPOSANTE W.
ASPUVW: WORD SPUVW,X < RELAI VERS LES SOUS-PROGRAMMES...
ADERIV: WORD DERIVE < SOUS-PROGRAMME DE DERIVATION.
AROND: WORD ROND < ARRONDI FLOTTANT ET CONVERSION ENTIERE.
<
< CONSTANTES DE CALCUL DES SINUS ET COSINUS :
<
ASIN: WORD SIN < S/P DE CALCUL DU SINUS,
ACOS: WORD COS < ET DU COSINUS.
ZZZ061: DZS 2 < NB EN FLOTTANT
ZZZ062: DZS 2
ZZZ063: DZS 1 < SIGNE
DEUXPI: FLOAT 6.2831853 < 2 PI
PI3141: FLOAT 3.1415926 < PI
PISUR2: FLOAT 1.5707963 < PI/2
ZZZ067: EQU PISUR2 < CSTES DU POLYNOME
ZZZ068: WORD 'AD00;'5110
ZZZ069: WORD '51FD;'9A2C
ZZZ070: WORD 'B3F9;'6CCE
ZZZ071: WORD '4FF4;'6BDD
<
< DONNEES DE LA TRANSFORMATION MATRICIELLE :
<
M11: FLOAT 1
M12: FLOAT 0
M13: FLOAT 0
M21: FLOAT 0
M22: FLOAT 1
M23: FLOAT 0
M31: FLOAT 0
M32: FLOAT 0
M33: FLOAT 1
AM: WORD M11,X < ACCES A LA MATRICE TRI-DIMENSIONNELLE.
KRX: FLOAT 0 < X(CENTRE DE LA TRANSFORMATION),
KRY: FLOAT 0 < Y(...),
KRZ: FLOAT 0 < Z(...).
ITRANS: WORD 0 < 0 : PAS DE TRANSFORMATION MATRICIELLE
< AVANT LE TRACE DES VECTEURS.
< 1 : TRANSFORMATION MATRICIELLE.
MAT: BYTE 6;'6D
ASCI " M"
MATN: WORD 0 < NUMERO DE L'ELEMENT COURANT...
ASCI "= "
<
< DONNEES DE PROJECTION :
<
XLSEG: WORD 0 < NOMBRE DE POINTS A TRACER SUR LE VECTEUR
< COURANT.
SINT: FLOAT -0.5
COST: FLOAT 0.86602
IPROJ: WORD 0 < 0 : PROJECTION PAR COST,SINT ;
< 1 : PROJECTION PERSPECTIVE.
PZ: FLOAT 0
F1: FLOAT 1
F3: FLOAT 3
BORNS: WORD XZMAX < ON NE CONSERVE LES POINTS (XS,YS,ZS)
BORNI: WORD MFFFF)XZMAX < QUE SI (BORNI)<=(ZS)<=(BORNS).
<
< DONNEES D'ARRONDI :
<
F05: FLOAT 0.5
<
< DONNEES POUR LA FONCTION :
<
F0: FLOAT 0
FWORK1: FLOAT 0 < TRAVAIL...
FWORK2: FLOAT 0 < TRAVAIL...
VARUVW: EQU $
VARU: FLOAT 0
XVARU:: VAL $-VARUVW-2 < INDEX COORDONNEE U.
VARV: FLOAT 0
XVARV:: VAL $-VARUVW-2 < INDEX COORDONNEE V.
VARW: FLOAT 0
XVARW:: VAL $-VARUVW-2 < INDEX COORDONNEE W.
VART: FLOAT 0
XVART:: VAL $-VARUVW-2 < INDEX COORDONNEE T.
AVAR: WORD VARUVW,X < REALI D'ACCES AUX COORDONNEES.
TRX: WORD 0 < CX,
TRY: WORD 0 < CY,
TRZ: WORD 0 < CZ.
VECU: FLOAT 0
VECV: FLOAT 0
VECW: FLOAT 0
NORMG: FLOAT 0 < NORME DU GRADIENT(F).
XNORMG: FLOAT 0 < VARIE DE 1*FK A NORMG*FK.
KFU: FLOAT 1
KFV: FLOAT 1
KFW: FLOAT 1
KFT: FLOAT 1
KUX: FLOAT 1
KVX: FLOAT 1
KWX: FLOAT 1
KTX: FLOAT 1
KUY: FLOAT 1
KVY: FLOAT 1
KWY: FLOAT 1
KTY: FLOAT 1
KUZ: FLOAT 1
KVZ: FLOAT 1
KWZ: FLOAT 1
KTZ: FLOAT 1
FXR: FLOAT 0
FYR: FLOAT 0
FZR: FLOAT 0
FTR: FLOAT 0
FXS: FLOAT 0
FYS: FLOAT 0
FZS: FLOAT 0
FK: FLOAT 1
<
< CONSTANTES DE DERIVATION :
<
FH: FLOAT 0.01 < PAS DE DERIVATION NUMERIQUE.
F2H: FLOAT 0.02
<
< CONSTANTES DE TRAVAIL ACCESSIBLES
< AU SOUS-PROGRAMME SPECIFIQUE PAR
< INDEXATION DOUBLE-MOT :
<
IF MODE-VISU,XWOR%7,,XWOR%7
NCT:: VAL 3 < NOMBRE DE CONSTANTES DE TRAVAIL.
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
NCT:: VAL 16 < NOMBRE DE CONSTANTES DE TRAVAIL.
XWOR%7: VAL 0
ACT: WORD CT,X < RELAI D'ACCES.
ASPCT: WORD SPCT < SOUS-PROGRAMME COMMUN D'ACCES.
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
WORD ERROR < ,
WORD DELETE < - : DELETE SGN LE RESIDENT
WORD PNUL < . : TRACER OU PAS LES PETITS VECTEURS
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
WORD GTV2 < 9 : RESIDENT <-- TV2
WORD ERROR < :
WORD ERROR < ;
WORD DBORNS < < : DEFINITION DE LA BORNE SUP DES ZS
WORD DTRANS < = : DEFINITION DE LA MATRICE M(I,J)
WORD DBORNI < > : DEFINITION DE LA BORNE INF DES ZS
WORD ERROR < ?
WORD ZPIN < @ : ENTREE DE 'ZR' ET 'TR'
WORD GCT < A : ENTREE CONSTANTES DE TRAVAIL
WORD MZBUF < B : INITIALISATION DU Z-BUFFER
WORD CVP < C : CHOIX VECTEUR/POINT
WORD DISP < D : RESIDENT <-- IMAGE SGN
WORD ERROR < E
WORD GOGE < F : FIN
WORD ERROR < G
WORD CDER < H : ENTREE CONSTANTE DE DERIVATION
WORD ERROR < I
WORD ERROR < J
WORD INFK < K : ENTREE CTTE TRANSFORMATION
WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE
WORD MASK < M : GET/STORE LE MASQUE
WORD NAME < N : NOMME L'IMAGE RESIDENTE
WORD ERROR < O
WORD COUL < P : CHOIX DU MODE DE TRACE DES VECTEURS
WORD ERROR < Q
WORD TRANSM < R : DEFINITION TRANSFORMATION MATRICIELLE
WORD IMSAV < S : SCRATCH <-- (RESIDENT)
WORD TRANS < T : TRACE DU CHAMP DE VECTEURS
WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE
WORD VITRE < V : GESTION DES TRANSPARENCES
WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI
WORD GORGX < X : POSITIONNEMENT DE 'ORGX'
WORD GORGY < Y : POSITIONNEMENT DE 'ORGY'
WORD PROJE < Z : ACTION SUR LE MODE DE PROJECTION
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 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
CPZ ZBUF < ALORS ???
JNE GOGE4 < Z-BUFFER INACTIF...
BSR ASPDKU < ECRITURE DU BLOC COURANT SI NECESSAIRE...
GOGE4: EQU $
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...
LAD DEMOVL
SVC 0 < CHARGEMENT DE LA BRANCHE D'OVERLAY...
STZ XCTCDA < AU CAS OU UN MALHEUREUX 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 $
LAI AMCDAI-ZERO
BSR ACCI < ENVOI DE !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 '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 < 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
<
<
< R E C U P E R A T I O N / G E N E R A T I O N
< D U M A S Q U E D ' I M A G E :
<
<
< FONCTION :
< CE MODULE PERMET DE GENERER (COMMANDE
< ">") OU DE RECUPERER (COMMANDE
< "<") LE MASQUE COURANT D'IMAGE
< DE, OU A PARTIR DE L'UNE DES 3 COMPOSANTES
< 'R', 'V' ET 'B' DE L'IMAGE SCRATCH.
<
<
MASK: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMC-ZERO
BSR APRINT < MESSAGE "STACK?"...
XWOR%7: VAL 0
LAD DEMIN
BSR AENTER
LBY &AREP < A=REPONSE "R"/"V"/"B"...
LBI TVPR-1 < B=NUMERO DU STACK DEMANDE...
CPI "R"
JE MASK1 < "R"...
LBI TVPV-1
CPI "V"
JE MASK1 < "V"...
LBI TVPB-1
CPI "B"
JE MASK1 < "B"...
MASK2: EQU $
BR AERROR < TRAITEMENT DES ERREURS...
MASK1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMS-ZERO
BSR APRINT < MESSAGE "SENS?"...
XWOR%7: VAL 0
LAD DEMIN
BSR AENTER
SLLD LIMAG=0 < B=ADRESSE DANS LA 'CDA' DU STACK DEMANDE.
LRM X,Y
WORD LIMAG < X=NOMBRE DE MOTS A DEPLACER,
WORD AMASK < Y=ADRESSE DU MASQUE DANS LA 'CDA'.
LBY &AREP < A=REPONSE DE "SENS?"...
CPI ">"
JE MASK3 < ">" : GENERATION...
CPI "<"
JNE MASK2 < ERREUR...
XR B,Y < "<" : RECUPERATION, ON PERMUTE EMETTEUR
< ET RECPTEUR...
MASK3: EQU $
STB AEMETT < EMETTEUR EN CDA,
STY ARECEP < RECEPTEUR EN CDA.
LRM B
WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT...
MASK4: EQU $
PSR X
LA AEMETT
LXI 1
RCDA
LA ARECEP
LXI 1
WCDA
PLR X
IC AEMETT < PROGRESSION DE L'EMETTEUR,
IC ARECEP < AINSI QUE DU RECEPTEUR...
JDX MASK4 < AU MOT SUIVANT DU MASQUE...
BR ALOOP < ET C'EST TOUT...
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 T I O N S U R L E Z - B U F F E R :
<
<
MZBUF: EQU $
STZ ZBUF < A PRIORI, Z-BUFFER ACTIF...
BSR AIN < ENTREE D'UN CARACTERE...
<
< REPONSES RECONNUES :
<
< N : PAS D'UTILISATION DU Z-BUFFER,
< O : UTILISATION DU Z-BUFFER (ET UTILISATION DE CELUI
< QUI EST DEJA SUR 'DKU'...),
< I : UTILISATION DU Z-BUFFER ET INITIALISATION
< AVEC L'INFINI...
<
CPI "N"
JE MZBUF6 < PAS DE Z-BUFFER...
CPI "O"
JE MZBUF4 < UITILISATION DU Z-BUFFER...
MZBUF7: EQU $
CPI "I"
JNE MZBUF3 < ERREUR : ON INHIBE LE Z-BUFFER !!!
<
< INITIALISATION DU Z-BUFFER :
<
LB ZMAX < ON SE PLACE LE PLUS LOIN POSSIBLE
< DE L'OBSERVATEUR, ET VU L'ORIENTATION
< DE L'AXE DES Z, C'EST A +L'INFINI...
LAI 0 < A=ADRESSE DU MOT COURANT DU Z-BUFFER.
LYI YSTORE < POUR ECRIRE DANS LE Z-BUFFER.
MZBUF5: EQU $
BSR AGZB < INITIALISATION DU Z-BUFFER.
ADRI 1,A < AU MOT SUIVANT...
JANE MZBUF5
JMP MZBUF4 < ET LE Z-BUFFER EST AUTORISE...
<
< AUTORISATION DU Z-BUFFER OU PAS :
<
MZBUF6: EQU $
IC ZBUF < ZBUF=1 : PAS DE Z-BUFFER...
MZBUF4: EQU $
BR ALOOP < ET C'EST TOUT...
MZBUF3: EQU $
BR AERROR
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'...
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 A L C U L S I N U S E T C O S I N U S :
<
<
< ARGUMENT :
< A,B = ANGLE EN RADIANS,
<
<
< RESULTAT :
< A,B = LIGNE TRIGONOMETRIQUE DEMANDEE.
<
<
COS: EQU $ < ENTRY 'COSINUS' :
FSB PISUR2 < A,B = TETA-PI/2,
FNEG < A,B = PI/2-TETA.
SIN: EQU $ < ENTRY 'SINUS' :
FST ZZZ061 < SAVE TEMPORAIRE DE L'ANGLE.
STZ ZZZ063
JAGE ZZZ072
FNEG
FST ZZZ061
IC ZZZ063
ZZZ072: EQU $
FDV DEUXPI
FIX
FLT
FMP DEUXPI
FSB ZZZ061
FNEG
FCAM PI3141
JL ZZZ073
FSB PI3141
IC ZZZ063
ZZZ073: EQU $
FCAM PISUR2
JL ZZZ074
FSB PI3141
FNEG
ZZZ074: EQU $
FDV PISUR2
FST ZZZ061
FMP ZZZ061
FST ZZZ062
FMP ZZZ071
FAD ZZZ070
FMP ZZZ062
FAD ZZZ069
FMP ZZZ062
FAD ZZZ068
FMP ZZZ062
FAD ZZZ067
FMP ZZZ061
DC ZZZ063
JNE ZZZ075
FNEG
ZZZ075: EQU $
RSR
PAGE
<
<
< E X T R A C T I O N D ' U N E R A C I N E C A R R E E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EXTRAIT LA
< RACINE CARREE D'UN NOMBRE PAR
< LA METHODE DE NEWTON, C'EST-A-DIRE
< A PARTIR DE LA SUITE :
< U(N+1)=(U(N)+K/U(N))/2,
< OU K DESIGNE LE NOMBRE DONT ON
< EXTRAIT LA RACINE...
<
<
< ARGUMENT :
< A,B=NOMBRE DONT ON EXTRAIT LA RACINE.
<
<
< RESULTAT :
< A,B=RACINE DU NOMBRE ARGUMENT.
<
<
RAC: EQU $
FCAZ
JE RAC2 < NOMBRE=0 ==> RACINE=0...
JG RAC3 < OK, NOMBRE>0...
QUIT 1 < ??!??!?!
RAC3: EQU $
PSR X,Y
LR A,X < X ET
LR B,Y < Y MEMORISENT LE NOMBRE ARGUMENT.
RAC1: EQU $
FST FWORK
LR X,A
LR Y,B
FDV FWORK < K/U(N),
FAD FWORK < U(N)+K/U(N),
FMP F05 < (U(N)+K/U(N))/2.
FCAM FWORK < TEST DE FIN ???
JNE RAC1 < NON...
PLR X,Y
RAC2: EQU $
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
<
<
< E N T R E E ' Z R ' E T ' T R '
<
<
ZPIN: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMZR-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST FZR < ENTREE DE 'FZR'.
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTR-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST FTR < ENTREE DE 'FTR'...
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< E N T R E E D E C X / C Y / K F U / K F V / K F W :
<
<
DTRANS: EQU $
DTRAN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRX-ZERO
BSR APRINT < EDITION DE "CX=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX.
JNE DTRAN1 < ERREUR...
STA TRX
DTRAN2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRY-ZERO
BSR APRINT < EDITION DE "CY=",
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX.
JNE DTRAN2 < ERREUR...
STA TRY
DTRAN5: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKFU-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KFU
DTRAN6: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKFV-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KFV
DTRAN7: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKFW-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KFW
DTRAN3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKFT-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KFT
<
<
< E N T R E E D E S C O E F F I C I E N T S
< K U X , K V X , ... , K T Z :
<
<
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKUX-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KUX
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKVX-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KVX
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKWX-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KWX
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKTX-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KTX
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKUY-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KUY
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKVY-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KVY
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKWY-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KWY
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKTY-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KTY
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKUZ-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KUZ
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKVZ-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KVZ
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKWZ-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KWZ
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKTZ-ZERO
XWOR%7: VAL 0
BSR AIFLOT
FST KTZ
DTRAN4: EQU $
BR ALOOP < EASY ??!?!?!
PAGE
<
<
< E N T R E E D E M ( I , J ) :
<
<
< ARGUMENT :
< A = ADRESSE DU MESSAGE POUR 'TW',
< NUMERO DE L'ELEMENT POUR 'TX'.
<
<
< RESULTAT :
< A,B = COEFFICIENT EN FLOTTANT.
<
<
PTRANS: EQU $
PSR X,Y
LR A,X < SAVE LE NUMERO DE L'ELEMENT,
SLRD NBRHEX
ORI "0" < CONVERSION ASCI DU NUMERO,
SLLS NBRHEX
XWOR%: VAL -NBRHEX
ORI "0">XWOR% < SUITE...
SLLD NBRHEX
IF MODE-VISU,XWOR%7,,XWOR%7
STA MATN < NUMERO EN ASCI DE L'ELEMENT...
XWOR%7: VAL 0
LR X,A
ADRI -'11,A
SLRD NBRHEX
LR A,X
ADR A,A
ADR A,X < X=TRIPLE DU PREMIER CHIFFRE,
LAI 0
SLLD NBRHEX
ADR A,X < X=CONVERSION LINEAIRE DU NUMERO DE
< L'ELEMENT : 11 --> 0, 12 --> 1,...
ADR X,X < ET ON DOUBLE CAR IL S'AGIT D'UNE
< MATRICE FLOTTANTE...
PTRAN1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAD MAT < A=ADRESSE DU MESSAGE MIJ=.
BSR APRINT < QUE L'ON EDITE...
XWOR%7: VAL 0
BSR AIHEX < ET CONVERSION...
JNE PTRAN1 < ERREUR...
LR A,Y < Y=NUMERATEUR...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSLAS-ZERO
BSR APRINT < EDITION DE "/"...
XWOR%7: VAL 0
BSR AIHEX < ET CONVERSION...
JNE PTRAN1 < ERREUR...
FLT
FST FWORK < SAUVEGARDE DU DENOMINATEUR...
LR Y,A
FLT < CALCUL DU NUMERATEUR,
FDV FWORK < (A,B)=NUMERATEUR/DENOMINATEUR.
FST &AM < QUE L'ON RANGE DANS LA MATRICE...
PLR X,Y
RSR
PAGE
<
<
< T R A N S F O R M A T I O N M A T R I C I E L L E ???
<
<
TRANSM: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMTRAN-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DE LA REPONSE :
STZ ITRANS < NON A PRIORI...
CPI "N"
JE PIC4 < "NON"...
IC ITRANS < OUI A PRIORI...
CPI "O"
JNE TRANSM < ????!?!?
LAI '11
BSR APTRAN < ENTREE DE M11,
LAI '12
BSR APTRAN < ENTREE DE M12,
LAI '13
BSR APTRAN < ENTREE DE M13,
LAI '21
BSR APTRAN < ENTREE DE M21,
LAI '22
BSR APTRAN < ENTREE DE M22,
LAI '23
BSR APTRAN < ENTREE DE M23,
LAI '31
BSR APTRAN < ENTREE DE M31,
LAI '32
BSR APTRAN < ENTREE DE M32,
LAI '33
BSR APTRAN < ENTREE DE M33.
PIC1: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKRX-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE PIC1 < ????!
FLT
FST KRX < ENTREE DE KRX,
PIC2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKRY-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE PIC2 < ??!!!!
FLT
FST KRY < ENTREE DE KRY,
PIC3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMKRZ-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE PIC3 < ??!??!
FLT
FST KRZ < ENTREE DE KRZ.
<
< SORTIE :
<
PIC4: EQU $
BR ALOOP < ???!?!
PAGE
<
<
< C H O I X D U M O D E D E P R O J E C T I O N :
<
<
PROJE: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMODM-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DU MODE :
< 0 : PAR COST,SINT ;
< 1 : EN PERSPECTIVE.
ADRI -"0",A
JAL PROJE < ERREUR...
CPI 1
JG PROJE < ERREUR...
STA IPROJ < RANGEMENT DU MODE...
JAE PROJE2 < PAR COST,SINT...
PROJE1: EQU $ < EN PERSPECTIVE...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMPROJ-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < ENTREE DE PZ.
JNE PROJE1 < ERREUR...
FLT
FST PZ < PZ=POSITION DE L'ECRAN.
PROJE2: EQU $
BR ALOOP < ET C'EST TOUT...
PAGE
IF MODE-ITEM,XWOR%7,,XWOR%7
<
<
< 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
<
<
< 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.
XLOAD: EQU $
BR AERROR < OUI, 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 XLOAD < RAPPEL DU SCRATCH EN RESIDENT SANS MASK.
TRANS: EQU $ < APPLICATION DE M(I,J).
LB ASPTR
JMP IM2
IM1: EQU $
IM2: EQU $
STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
BSR ASPOP
BR ALOOP
XWOR%7: VAL 0
PAGE
<
<
< B R A N C H E D ' O V E R L A Y :
<
<
DEBOV1: EQU $
XWOR%1: VAL DEBOV1-ZERO*NOCMO
OVLTZ2: EQU ZERO+XWOR%1 < ADRESSE-OCTET DE LA BRANCHE...
BYTE " ";NOMBB
ASCI " "
BYTE '04;'D0
XWOR%1: VAL ITEM2-ZERO
IF $-ZERO-XWOR%1,XWOR%,,
IF ATTENTION : LA RACINE DE L'OVERLAY EST TROP LONGUE !!!
XWOR%: VAL 0
PAGE
<
<
< S O U S - P R O G R A M M E D E T R A N S F O R M A T I O N :
<
<
< FONCTION :
<
<
SPTR: EQU $
PSR A,B,X,Y
<
< DETERMINATION DE (XR,YR) :
<
LA XR
SB TRX
FLT
FST FXR < XR.
LA YR
SB TRY
FLT
FST FYR < YR.
CPZ ZBUF < Z-BUFFER ???
JE SPTR10 < IL EST ACTIF, ON DIFFERE TOUS LES TESTS.
<
< CAS OU LE Z-BUFFER EST INHIBE :
<
BSR ASPGPR < A=NIVEAU DU POINT (XR,YR).
CPZ SENS
JE SPTR1A < RESIDENT --> SCRATCH : ON DIFFERE
< LE TEST SUR LE POINT DESTINATION DONT
< ON NE CONNAIT PAS ENCORE LES COORDONNEES
< XS,YS...
JAE SPTR10 < SCRATCH --> RESIDENT : LE POINT DESTINA-
< TION EST LE POINT XR,YR :
< IL EST NOIR, ON LE TRAITE...
SPTR1B: EQU $
BR ASPTR1 < IL N'EST PAS NOIR, ON N'Y TOUCHE PAS...
SPTR1A: EQU $
JAE SPTR1B < DANS LE CAS RESIDENT --> SCRATH, LORSQUE
< LE POINT (XR,YR) EST NOIR, ET LORSQUE
< LE Z-BUFFER EST INHIBE, ON NE FAIT RIEN.
SPTR10: EQU $
<
<
< C A L C U L D U V E C T E U R :
<
<
<
< COMPOSANTE 'U' :
<
FLD FXR
FMP KFU
FMP KUX
FST VARU < U=KUX*KFU*FXR.
FLD FYR
FMP KFV
FMP KVX
FST VARV < V=KVX*KFV*FYR.
FLD FZR
FMP KFW
FMP KWX
FST VARW < W=KWX*KFW*FZR.
FLD FTR
FMP KFT
FMP KTX
FST VART < T=KTX*KFT*FTR.
PSR L
LRM L
WORD FLOC+'80
BSR ASPU
PLR L
FST VECU < COMPOSANTE EN 'U' DU VECTEUR.
LA IECL
OR IMODN
JAE DERI30 < NI ECLAIRAGE, NI N-MODULATION...
LYI XSPU
LXI XVARU
BSR ADERIV
FST DXDU < CALCUL DE DX/DU.
LXI XVARV
BSR ADERIV
FST DXDV < CALCUL DE DX/DV.
DERI30: EQU $
<
< COMPOSANTE 'V' :
<
FLD FXR
FMP KFU
FMP KUY
FST VARU < U=KUY*KFU*FXR.
FLD FYR
FMP KFV
FMP KVY
FST VARV < V=KVY*KFV*FYR.
FLD FZR
FMP KFW
FMP KWY
FST VARW < W=KWY*KFW*FZR.
FLD FTR
FMP KFT
FMP KTY
FST VART < T=KTY*KFT*FTR.
PSR L
LRM L
WORD FLOC+'80
BSR ASPV
PLR L
FST VECV < COMPOSANTE EN 'V' DU VECTEUR.
LA IECL
OR IMODN
JAE DERI31 < NI ECLAIRAGE, NI N-MODULATION...
LYI XSPV
LXI XVARU
BSR ADERIV
FST DYDU < CALCUL DE DY/DU.
LXI XVARV
BSR ADERIV
FST DYDV < CALCUL DE DY/DV.
DERI31: EQU $
<
< COMPOSANTE 'W' :
<
FLD FXR
FMP KFU
FMP KUZ
FST VARU < U=KUZ*KFU*FXR.
FLD FYR
FMP KFV
FMP KVZ
FST VARV < V=KVZ*KFV*FYR.
FLD FZR
FMP KFW
FMP KWZ
FST VARW < W=KWZ*KFW*FZR.
FLD FTR
FMP KFT
FMP KTZ
FST VART < T=KTZ*KFT*FTR.
PSR L
LRM L
WORD FLOC+'80
BSR ASPW
PLR L
FST VECW < COMPOSANTE EN 'W' DU VECTEUR.
LA IECL
OR IMODN
JAE DERI32 < NI ECLAIRAGE, NI N-MODULATION...
LYI XSPW
LXI XVARU
BSR ADERIV
FST DZDU < CALCUL DE DZ/DU.
LXI XVARV
BSR ADERIV
FST DZDV < CALCUL DE DZ/DV.
DERI32: EQU $
<
<
< C H O I X V E C T E U R S / P O I N T S :
<
<
CPZ IMODVP < QUEL EST LE MODE ???
JNE GRAD14 < POINTS...
<
<
< N O R M E D U V E C T E U R :
<
<
FLD VECU
FMP VECU
FST FWORK1
FLD VECV
FMP VECV
FAD FWORK1
FST FWORK1 < FWORK1=VECU**2+VECV**2+VECW**2.
FLD VECW
FMP VECW
FAD FWORK1
BSR ARAC
FST NORMG < NOMRG=NORME DU VECTEUR.
FMP FK
BSR AROND
JAG GRAD1 < OK...
LAI 0 < A PRIORI, ON VA LE TRACER AVEC UNE
< LONGUEUR DE 1...
CPZ INUL < ALORS ???
JNE GRAD1 < ET OUI, ON LE TRACE...
BR ASPTR1 < SI LA CONSTANTE 'K' EST MAUVAISE,
< OU SI LE VECTEUR EST TROP PETIT, ON
< NE TRACE RIEN...
GRAD1: EQU $
ADRI 1,A < ET OUI, C'EST LA FAMEUX PROBLEME DES
< PIQUETS ET DES INTERVALLES...
STA XLSEG < AFIN DE CONNAITRE L'EXTREMITE PAR
< DECOMPTAGE.
<
< CAS DES VECTEURS :
<
LA KCOUL < VECTEURS, MAIS DE QUELLE COULEUR ???
JANE GRAD10 < NON NOIR...
LR A,X < NOIR,
LA LTRANS
TBT 0,X < MAIS LE NOIR EST-IL TRANSPARENT ???
JNC GRAD10 < NON...
<
< CAS DES POINTS, OU DES VECTEURS NOIRS ET TRANSPARENTS :
<
GRAD14: EQU $
LXI 1 < ON NE VA TRACER QUE LE POINT EXTREMITE...
STX XLSEG
JMP GRAD11
<
< CAS DES VECTEURS "VISIBLES" :
<
GRAD10: EQU $
FLD F0
FST XNORMG
<
<
< R E P R E S E N T A T I O N G R A P H I Q U E :
<
<
GRAD11: EQU $
CPZ KCOUL < MODE DE TRACE ???
JGE GRAD9 < MONOCHROME...
FLD F1 < DEGRADE...
FST FNIV < INITIALISATION DU NIVEAU DE GRIS
< DU VECTEUR.
LAI NIVMAX
FLT
CPZ IMODVP < MODE VECTEUR OU POINT ???
JNE GRAD20 < POINT : ON FORCE LE MAX...
FDV NORMG < VECTEUR : IL FAUT UN DEGRADE...
FDV FK
GRAD20: EQU $
FST FCONS < CONSTANTE DE PROGRESSION DE 'FNIV' ;
< 'FNIV' VARIERA DONC DE 1 A 'NIVMAX'.
GRAD9: EQU $
LX XLSEG < X=NOMBRE DE POINTS A TRACER.
GRAD2: EQU $
DC XLSEG < DECOMPTAGE DES POINTS.
PSR X < SAVE LE NOMBRE DE POINTS A TRACER.
JE GRAD30 < XLSEG=0 : CCAS DE L'EXTREMITE...
BR AGRD12 < XLSEG#0 : CE N'EST PAS L'EXTREMITE...
GRAD30: EQU $
<
< CAS DE L'EXTREMITE :
<
FLD VECU
FMP FK
FST VECU
FLD VECV
FMP FK
FST VECV
FLD VECW
FMP FK
FST VECW
CPZ IMODVP < QUEL EST LE MODE ???
JE GRAD15 < VECTEURS...
<
< CAS DES POINTS ABSOLUS :
<
FLD VECU
FST FXS < FXS=VECU,
FLD VECV
FST FYS < FYS=VECV,
FLD VECW
JMP GRAD16 < FZS=VECW.
<
< CAS DES VECTEURS :
<
GRAD15: EQU $
FLD FXR
FAD VECU
FST FXS < FXS=FXR+VECU,
FLD FYR
FAD VECV
FST FYS < FYS=FYR+VECV,
FLD FZR
FAD VECW
GRAD16: EQU $
FST FZS < FZS=FZR+VECW.
LA IECL
OR IMODN
JANE SPTR21 < ECLAIRAGE OU MODULATION-N...
BR ANECL < NON, ALLONS PROJETER DIRECTEMENT...
SPTR21: EQU $
<
< DETERMINATION DU VECTEUR NORMAL N :
<
FLD DZDU
FMP DYDV
FST FWORK
FLD DYDU
FMP DZDV
FSB FWORK
FST NX < NX=(DY/DU)*(DZ/DV)-(DZ/DU)*(DY/DV).
FLD DXDU
FMP DZDV
FST FWORK
FLD DZDU
FMP DXDV
FSB FWORK
FST NY < NY=(DZ/DU)*(DX/DV)-(DX/DU)*(DZ/DV).
FLD DYDU
FMP DXDV
FST FWORK
FLD DXDU
FMP DYDV
FSB FWORK
FST NZ < NZ=(DX/DU)*(DY/DV)-(DY/DU)*(DX/DV).
<
< CALCUL DE LA NORME DU VECTEUR NORMAL :
<
FLD NX
FMP NX
FST FWORK
FLD NY
FMP NY
FAD FWORK
FST FWORK
FLD NZ
FMP NZ
FAD FWORK
BSR ARAC
FST NORMN < NORME(N)=RAC(NX*NX+NY*NY+NZ*NZ).
FCAZ
JG EOK1 < OK, NORMN>0...
QUIT 1 < ??!?!??!
EOK1: EQU $
CPZ IECL < ECLAIRE-T'ON ???
JE SPTR90 < NON, DONC ON FAIT DE LA MODULATION-N...
<
< CALCUL DU VECTEUR 'MS' ALLANT DU POINT
< COURANT (XS,YS,ZS) A LA SOURCE LUMINEUSE :
<
LA SX
SB TRX < CHANGEMENT DE REFERENTIEL,
FLT
FSB FXS
FST MSX < X(MS).
LA SY
SB TRY
FLT
FSB FYS
FST MSY < Y(MS).
LA SZ
FLT
FSB FZS
FST MSZ < Z(MS).
<
< CALCUL DE LA NORME DU VECTEUR 'MS' :
<
FLD MSX
FMP MSX
FST FWORK
FLD MSY
FMP MSY
FAD FWORK
FST FWORK
FLD MSZ
FMP MSZ
FAD FWORK
BSR ARAC
FST NORMS < NORME(MS)=RAC(MSX*MSX+MSY*MSY+MSZ*MSZ).
FCAZ
JG EOK2 < OK, NORMS>0...
QUIT 1 < ??!???!!
EOK2: EQU $
<
< CALCUL DE L'INCIDENCE DES RAYONS LUMINEUX
< EN (XS,YS,ZS), SOIT CALCUL DU PRODUIT
< SCALAIRE N.MS :
FLD NX
FMP MSX
FST FWORK
FLD NY
FMP MSY
FAD FWORK
FST FWORK
FLD NZ
FMP MSZ
FAD FWORK < NX*MSX+NY*MSY+NZ*MSZ,
FDV NORMN
FDV NORMS < ON DISPOSE ICI DU 'COS' DE L'ANGLE
< D'INCIDENCE DES RAYONS LUMINEUX,
FMP F05 < QUE L'ON RAMENE DANS LE SEGMENT
< (-0.5,+0.5),
FAD F05 < PUIS DANS (0,+1)...
FST FCOEF < CE QUI DONNE LE COEFFICIENT DE
< MODULATION DES NIVEAUX...
SPTR90: EQU $
CPZ IMODN < MODULATION-N ???
JE SPTR91 < NON, ECLAIRAGE SEULEMENT...
<
< CAS DE LA MODULATION SUR LA NORMALE :
<
LA XR
STA XS < POUR SE PLACER AU
LA YR
STA YS < (U,V) DE TV2.
LA CTCDA
STA XCTCDA < POUR ATTEINDRE TV2...
BSR ASPGPS < A=NIVEAU(U,V) DANS TV2,
STZ XCTCDA < POUR ATTEINDRE TV1...
FLT
FMP FMODN < FMODN*NIVEAU(U,V),
FMP FK < FK*FMODN*NIVEAU(U,V),
FST FWORK < CE QUI DONNE LA CONSTANTE DE MODULATION.
FMP NX
FAD FXS
FST FXS < FXS <-- FXS+NX*FK*FMODN*NIVEAU(U,V).
FLD NY
FMP FWORK
FAD FYS
FST FYS < FYS <-- FYS+NY*FK*FMODN*NIVEAU(U,V).
FLD NZ
FMP FWORK
FAD FZS
FST FZS < FZS <-- FZS+NZ*FK*FMODN*NIVEAU(U,V).
SPTR91: EQU $
NECLX: EQU $
JMP GRAD13 < VERS LA TRANSFORMATION MATRICIELLE...
<
< CAS DES POINTS AUTRES QUE L'EXTREMITE :
<
GRAD12: EQU $
FLD VECU
FMP XNORMG
FDV NORMG
FAD FXR
FST FXS < FXS=FXR+VECU*(ALPHA/NORMG), OU
< ALPHA=1,2,...,NORMG.
FLD VECV
FMP XNORMG
FDV NORMG
FAD FYR
FST FYS < FYS=FYR+VECV*(ALPHA/NORMG).
FLD VECW
FMP XNORMG
FDV NORMG
FAD FZR
FST FZS < FZS=FZR+VECW*(ALPHA/NORMG).
FLD XNORMG
FAD F1
FST XNORMG < PROGRESSION DE XNORMG DE 1...
<
< TRANSFORMATION MATRICIELLE ???
<
GRAD13: EQU $
CPZ ITRANS
JE TRANSX < NON...
FLD FXS
FSB KRX
FST FXS
FLD FYS
FSB KRY
FST FYS
FLD FZS
FSB KRZ
FST FZS
FLD FXS
FMP M11
FST FWORK
FLD FYS
FMP M12
FAD FWORK
FST FWORK
FLD FZS
FMP M13
FAD FWORK
FAD KRX
PSR A,B < FXS=M11*(XR-KRX)+M12*(YR-KRY)
< +M13*(ZR-KRZ)+KRX.
FLD FXS
FMP M21
FST FWORK
FLD FYS
FMP M22
FAD FWORK
FST FWORK
FLD FZS
FMP M23
FAD FWORK
FAD KRY
PSR A,B < FYS=M21*(XR-KRX)+M22*(YR-KRY)
< +M23*(ZR-KRZ)+KRY.
FLD FXS
FMP M31
FST FWORK
FLD FYS
FMP M32
FAD FWORK
FST FWORK
FLD FZS
FMP M33
FAD FWORK
FAD KRZ
FST FZS < FZS=M31*(XR-KRX)+M32*(YR-KRY)
< +M33*(ZR-KRZ)+KRZ.
PLR A,B
FST FYS
PLR A,B
FST FXS
TRANSX: EQU $
<
< PROJECTION :
<
NECL: EQU $
FLD FZS
CPZ IPROJ < TYPE DE PROJECTION ???
JE SPTRX1 < PAR SINT,COST...
<
< PROJECTION PERSPECTIVE :
<
FDV PZ
FSB F1
FNEG
FST FWORK < 1-(FZS/PZ)
FCAZ
JNE EOK3 < OK, 1-(FZS/PZ)#0...
QUIT 1 < ??!????!
EOK3: EQU $
FLD FXS
FDV FWORK < FXS/(1-(FZS/PZ))
JMP SPTRX2
<
< PROJECTION PAR SINT,COST :
<
SPTRX1: EQU $
FMP COST < ET ON PROJETTE...
FAD FXS
SPTRX2: EQU $
BSR AROND
AD TRX
STA XS < XS=X+Z*COST.
CPZ IPROJ < TYPE DE PROJECTION ???
JE SPTRX3 < PAR SINT,COST...
<
< PROJECTION PERSPECTIVE :
<
FLD FYS
FDV FWORK < FYS/(1-(FZS/PZ))
JMP SPTRX4
<
< PROJECTION PAR SINT,COST :
<
SPTRX3: EQU $
FLD FZS
FMP SINT
FAD FYS
SPTRX4: EQU $
BSR AROND
AD TRY
STA YS < YS=Y+Z*SINT.
<
< TEST DES HORS-ECRAN :
<
SPTR4: EQU $
LA XS
CPZ MODX < EST-ON SUR UN X-TORE ???
JE SPTT3 < OUI...
JAL SPTR1X < NON, ET XS EST OVERSCREEN...
CPI NPOLM1
JG SPTR1X < DE MEME...
JMP SPTT4 < OK, XS EST DANS L'ECRAN...
SPTT3: EQU $ < CAS OU L'ON EST SUR UN X-TORE :
ANDI NPOLM1
STA XS < CALCUL MODULO DE XS...
SPTT4: EQU $
LA YS
CPZ MODY < EST-ON SUR UN Y-TORE ???
JE SPTT6 < OUI...
JAL SPTR1X < NON, ET YS EST OVERSCREEN...
CPI NLIGM1
JG SPTR1X < DE MEME...
JMP SPTT7
SPTT6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE :
ANDI NLIGM1
STA YS < CALCUL MODULO DE YS...
SPTT7: EQU $
<
< RECUPERATION DES POINTS SOURCES (M2) ET DESTINATION (M1) :
<
BSR ASPGS
STA NM1 < NM1=NIVEAU PRESENT ANTERIEUREMENT...
LA KCOUL < MODE DE TRACE ???
JAGE GRAD4 < MONOCHROME...
FLD FNIV < AVEC DEGRADE...
FAD FCONS
FST FNIV
FIX
CPI NIVMAX
JLE GRAD4
LAI NIVMAX
GRAD4: EQU $
STA NM2 < NM2=NIVEAU A INSCRIRE.
<
< CALCUL DE LA PROFONDEUR DU POINT COURANT :
<
FLD FZS < PROFONDEUR DU POINT M2,
FIX
JNV SPTR22 < OK...
LA ZMAX < OVERFLOW, ON PREND L'INFINI ENTIER,
CPZ FZS < POSITIF OU NEGATIF ???
JG SPTR22 < +
NGR A,A < -
SPTR22: EQU $
CP BORNS
JG SPTR1X < (ZS)>(BORNS) : POINT IGNORE...
CP BORNI
JL SPTR1X < (ZS)<(BORNI) : POINT IGNORE...
<
< UTILISATION DU Z-BUFFER :
<
LR A,X < X=PROFONDEUR DU POINT M2=INT(FZS(XS,YS)).
LA YS
SWBR A,A
OR XS
STA WORK2 < A=YS/XS=ADRESSE D'ACCES AU Z-BUFFER.
LR X,B < AU CAS OU Z-BUFFER INACTIF...
CPZ ZBUF < ALORS ???
JNE SPTR70 < ET OUI, INACTIF...
LYI YLOAD
BSR AGZB < B=PROFONDEUR DU POINT ANTERIEUR M1,
SPTR70: EQU $
CPR X,B < POSITION RELATIVE DE M1 ET M2...
LR X,Y < Y=SAUVEGARDE DE LA PROFONDEUR DE M2.
LA LTRANS < A=LISTE DES TRANSPARENCES...
JL SPTR52 < B<X : LE POINT M2 EST A TRACER PLUS
< LOIN DE L'ECRAN QUE M1...
<
< CAS OU LE POINT M2 EST A TRACER PLUS PRES QUE M1 :
<
LX NM2
TBT 0,X < LE POINT M2 ETANT EN AVANT, EST-IL
< TRANSPARENT ???
LA NM2
JC SPTR53 < OUI, M2 EST TRANSPARENT... ON DOIT
< DONC CUMULER M1 ET M2...
JMP SPTR54 < NON, M2 ECRASE DONC M1...
<
< CAS OU LE POINT M2 EST A TRACER PLUS LOIN QUE M1 :
<
SPTR52: EQU $
LX NM1
TBT 0,X < LE POINT M1 ETANT EN AVANT, EST-IL
< TRANSPARENT ???
JNC SPTR1X < NON, DONC M2 EST INVISIBLE...
LA NM2
<
< TRANSPARENCE :
<
SPTR53: EQU $
OR NM1 < NIVEAU=NM1.OR.NM2
SPTR54: EQU $
XM WORK2 < WORK2=NIVEAU A METTRE DANS L'IMAGE,
< A=YS/XS=ADRESSE D'ACCES AU Z-BUFFER,
LR Y,B < B=PROFONDEUR DE M2,
CPZ ZBUF < ALORS ???
JNE SPTR71 < Z-BUFFER INACTIF...
LYI YSTORE
BSR AGZB < QUE L'ON INSERE DANS LE Z-BUFFER...
SPTR71: EQU $
LA WORK2 < A=NIVEAU,
CPZ XLSEG < EST-CE L'EXTREMITE ???
JNE SPTR60 < NON...
<
< CAS DE L'EXTREMITE DU VECTEUR :
< DANS CE CAS, ON FAIT :
< (XS,YS) <-- NIVEAU(XR,YR).OR.(NIVEAU CALCULE),
< EN EFFET, SI PAR EXEMPLE ON A
< CHOISI DE TRACER LES VECTEURS EN
< NOIR, SOIT KCOUL=0, A L'EXTREMITE
< DU VECTEUR ON TROUVERA DONC LE
< POINT (XR,YR) DEPLACE PAR LE
< VECTEUR CALCULE ; ON PEUT AINSI
< VOIR LA DEFORMATION DE LA "GRILLE"
< INITIALE...
<
LR A,B < B=NIVEAU CALCULE,
BSR ASPGR < A=NIVEAU(XR,YR),
CPR A,B < RECHERCHE DU MAX (SOIT .OR.),
JLE SPTR60 < B<=A : NIVEAU CALCULE<=NIVEAU(XR,YR),
LR B,A < C'EST EN FAIT LE NIVEAU CALCULE
< QUE L'ON VA METTRE...
SPTR60: EQU $
BSR ACOEF < MODULATION LUMINEUSE EVENTUELLE...
BSR ASPRS < GENERATION DU SCRATCH...
<
< POINT COURANT SUIVANT DU GRADIENT :
<
SPTR1X: EQU $
PLR X
JDX GRAD3 < S'IL EXISTE...
<
< SORTIE DU MODULE :
<
SPTR1: EQU $
PLR A,B,X,Y
RSR
GRAD3: EQU $
BR AGRAD2
PAGE
<
<
< D E R I V A T I O N N U M E R I Q U E :
<
<
< ARGUMENTS :
< FH=CONSTANTE PROGRAMMABLE,
< Y=NUMERO DE LA FONCTION QUE L'ON DESIRE DERIVER
< (XSPU, XSPV OU XSPW),
< X=NUMERO DE LA VARIABLE PAR RAPPORT A LAQUELLE
< ON DERIVE (XVARU, XVARV, XVARW OU XVART).
<
<
< RESULTAT :
< A,B=VALEUR DE LA DERIVEE AU POINT CONSIDERE.
<
<
DERIVE: EQU $
LR Y,A < VALIDATION DE LA FONCTION :
JAL DERIV1 < ERREUR...
CPI XSPW
JLE DERIV2 < OK...
DERIV1: EQU $
QUIT 1 < !?!?!??!
DERIV2: EQU $
LR X,A < VALIDATION DE LA VARIABLE DE DERIVATION :
TBT NBITMO-1
JC DERIV3
JAL DERIV3
CPI XVART
JLE DERIV4
DERIV3: EQU $
QUIT 1 < !?!??!??!
DERIV4: EQU $
<
< CALCUL DE LA DERIVEE :
<
FLD &AVAR < VARIABLE ALPHA,
PSR A,B,L < SAUVEGARDE DE ALPHA, ET DE LA BASE L...
LRM L
WORD FLOC+'80 < POUR LE CALCUL DE LA FONCTION F.
FAD FH
FST &AVAR
PSR X,Y
LR Y,X
BSR &ASPUVW
PLR X,Y
PSR A,B < F(ALPHA+H).
FLD &AVAR
FSB F2H
FST &AVAR
PSR X,Y
LR Y,X
BSR &ASPUVW
PLR X,Y
FST FWORK < F(ALPHA-H).
PLR A,B
FSB FWORK
FDV F2H
FST FWORK < DERIVEE=(F(ALPHA+H)-F(ALPHA-H))/(2*H).
PLR A,B,L < RESTAURE ALPHA, ET LA BASE L.
FST &AVAR
FLD FWORK < (A,B)=VALEUR DE LA DERIVEE.
RSR
PAGE
<
<
< C O E F F I C I E N T D ' I N T E N S I T E
< L U M I N E U S E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME MODULE LE
< NIVEAU LUMINEUX D'UN POINT PAR
< UN COEFFICIENT CALCULEE A PARTIR
< DE L'ANGLE D'INCIDENCE DES RAYONS
< LUMINEUX.
<
<
< ARGUMENT :
< A=NIVEAU A MODULER,
<
<
< RESULTAT :
< A=NIVEAU MODULE...
<
<
COEF: EQU $
JAE COEF1 < NIVEAU NUL...
PSR B
FLT
FMP FCOEF < PRISE EN COMPTE DE L'INCIDENCE...
BSR AROND < ET CONVERSION ENTIERE...
PLR B
JANE COEF1 < NIVEAU NON NUL...
LA INUL < NIVEAU NUL, FAUT-IL LE VISUALISER ???
< A=INUL (0 OU 1)...
COEF1: EQU $
RSR
PAGE
IF MODE-VISU,XWOR%7,,XWOR%7
<
<
< 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
<
<
< 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.
XLOAD: EQU $
BR AERROR < OUI, 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 XLOAD < RAPPEL DU SCRATCH EN RESIDENT SANS MASK.
TRANS: EQU $ < APPLICATION DE M(I,J).
LB ASPTR
JMP IM2
IM1: EQU $
IM2: EQU $
STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
BSR ASPOP
BR ALOOP
XWOR%7: VAL 0
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 :
<
<
< RESULTAT :
< A=CARACTERE ENTRE.
<
<
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 :
<
<
< RESULTAT :
< VOIR 'HEX'...
<
<
IHEX: EQU $
LAD DEMHEX
BSR AENTER
BSR AHEX < A=NOMBRE HEXADECIMAL, ET CODES CONDITION.
RSR
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...
BSR APRINT
XWOR%7: VAL 0
IF MODE-ITEM,XWOR%7,,XWOR%7
IFLOT1: EQU $
XWOR%7: VAL 0
BSR AIHEX < ENTREE DU NUMERATEUR,
JNE IFLOT1 < ERREUR...
LR A,Y < Y=NUMERATEUR.
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSLAS-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX < 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 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...
JLE INFK < 'K' DOIT ETRE STRICTEMENT POSITIVE...
FST FK < OK...
BR ALOOP
PAGE
<
<
< C O N S T A N T E D E D E R I V A T I O N :
<
<
CDER: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMH-ZERO
XWOR%7: VAL 0
BSR AIFLOT < ENTREE DE H :
FST FH
FDV F05
FST F2H < ET CALCUL DE 2*H...
BR ALOOP
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 AMCT-ZERO
XWOR%7: VAL 0
BSR AIFLOT < ENTREE DE LA CONSTANTE...
FST &ACT < ET MEMORISATION...
BR ALOOP
PAGE
<
<
< A C C E S C O N S T A N T E D E T R A V A I L :
<
<
< ARGUMENT :
< X=NUMERO DE LA CONSTANTE (DE 0 A NCT-1), ET NON PAS
< SON INDEX EN DOUBLE-MOTS !!!
<
<
< RESULTAT :
< A,B=VALEUR DE LA CONSTANTE.
<
<
SPCT: EQU $
LR X,A < VALIDATION DU NUMERO :
JAL SPCT1 < ERREUR...
CPI NCT
JL SPCT2 < OK...
SPCT1: EQU $
QUIT 1 < ?!??!?!
SPCT2: EQU $
PSR X
ADR X,X < INDEX DOUBLE-MOTS,
FLD &ACT < (A,B)=CONSTANTE DE TRAVAIL...
PLR X
RSR
PAGE
<
<
< < : D E F I N I T I O N D E B O R N S :
<
<
DBORNS: EQU $
BSR AIHEX < ENTREE DE LA BORNE SUPERIEURE :
JNE DBORNS < ERREUR...
CP BORNI < VALIDATION RELATIVE...
JL DBORNS < ERREUR...
STA BORNS < OK...
BR ALOOP < ET C'EST TOUT...
<
<
< > : D E F I N I T I O N D E B O R N I :
<
<
DBORNI: EQU $
BSR AIHEX < ENTREE DE LA BORNE INFERIEURE :
JNE DBORNI < ERREUR...
CP BORNS < VALIDATION RELATIVE...
JG DBORNI < ERREUR...
STA BORNI < OK...
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< G E S T I O N D E L A T R A N S P A R E N C E :
<
<
VITRE: EQU $
BSR AIN < ENTREE DU NIVEAU DE GRIS "0" A "7"),
ADRI -"0",A < CONVERSION...
JAL VITRE < ERREUR...
CPI NIVMAX
JG VITRE < ERREUR...
LR A,X < X=NIVEAU DEMANDE,
LB LTRANS < B=LISTE DES TRANSPARENCES.
BSR AIN < ENTREE DE O (ON) / N (OFF) :
CPI "O"
JE VITRE1 < "ON"...
CPI "N"
JNE VITRE < ON RECOMMENCE TOUT...
<
< SUPPRESSION DE LA TRANSPARENCE :
<
RBT NBITMO,X
JMP VITRE2
<
< MISE EN PLACE DE LA TRANSPARENCE :
<
VITRE1: EQU $
SBT NBITMO,X
VITRE2: EQU $
STB LTRANS
BR ALOOP
PAGE
<
<
< M O D E D E T R A C E D E S V E C T E U R S :
<
<
COUL: EQU $
BSR AIN < ENTREE DU NIVEAU DE COULEUR DESIRE...
<
< REPONSES RECONNUES :
< D : DEMANDE DE DEGRADE,
< 0-7 : CHOIX DU NIVEAU DANS LEQUEL TRACER.
<
STZ KCOUL
DC KCOUL < KCOUL=-1 : DEGRADE A PRIORI...
CPI "D"
JE COUL1 < DEGRADE : KCOUL=-1...
ADRI -"0",A < CONVERSION :
JAL COUL < ERREUR...
CPI NIVMAX
JG COUL < ERREUR...
STA KCOUL < 0-7 : MODE MONOCHROME.
COUL1: EQU $
BR ALOOP < ET C'EST TOUT...
PAGE
<
<
< T R A C E D E S P E T I T S V E C T E U R S :
<
<
PNUL: EQU $
STZ INUL < NON A PRIORI...
BSR AIN < ENTREE DE LA REPONSE :
<
< REPONSES RECONNUES :
< O : ON TRACE LES PETITS VECTEURS (DE NORME
< INFERIEURE A 1),
< N : ON NE LES TRACE PAS...
<
CPI "N"
JE PNUL1 < NON : INUL=0...
CPI "O"
JNE PNUL < ??!??!
IC INUL < OUI : INUL#0...
PNUL1: EQU $
BR ALOOP
PAGE
<
<
< C H O I X V E C T E U R S / P O I N T S :
<
<
CVP: EQU $
STZ SENS < SENS R --> S A PRIORI...
FLD F1
FST FCOEF < FCOEF=1 A PRIORI...
STZ IECL < PAS D'ECLAIRAGE A PRIORI...
STZ IMODN < PAS DE N-MODULATION A PRIORI...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMVP-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE DE LA REPONSE :
<
< REPONSES RECONNUES :
< 0 : LES SOUS-PROGRAMMES SPECIFIQUES DONNENT
< DES COMPOSANTES DE VECTEURS,
< 1 : ILS DONNENT DES COORDONNEES ABSOLUES DE POINTS.
<
ADRI -"0",A < DECODAGE,
JAL CVP < ERREUR...
CPI 1
JG CVP < ERREUR...
STA IMODVP < MEMORISATION DU CHOIX.
JAE CVP1 < OK, TRACE DE VECTEURS, DONC PAS
< D'ECLAIRAGE, NI DE MODULATION SUR
< LA NORMALE...
<
<
< E C L A I R A G E ? ? ?
<
<
ECLAIR: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMECL-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN
LAI 1
FLT
FST FCOEF < A PRIORI, ON DONNE A 'FCOEF' LA VALEUR
< DE MODULATION MAX...
LBY &AREP < A=REPONSE...
STZ IECL < IECL=0 : NON A PRIORI...
CPI "N"
JE ECL1 < NON...
IC IECL < IECL=1 : OUI A PRIORI...
CPI "O"
JNE ECLAIR < ?!!??!!
<
< SI OUI, ON RENTRE LES COORDONNEES DE LA SOURCE :
<
ECL2: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMESX-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE ECL2 < ERREUR...
STA SX < X(SOURCE)...
ECL3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMESY-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE ECL3 < ERREUR...
STA SY < Y(SOURCE)...
ECL4: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMESZ-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIHEX
JNE ECL4 < ERREUR...
STA SZ < Z(SOURCE)...
ECL1: EQU $
<
<
< C O M M A N D E D E N - M O D U L A T I O N :
<
<
CMODN: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMNMOD-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < ENTREE D'UN CARACTERE O (ON) / N (OFF) :
STZ IMODN < OFF A PRIORI...
CPI "N"
JE CMODN1 < OFF.
CPI "O"
JNE CMODN < ?!??!
IC IMODN < ON.
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMN-ZERO
XWOR%7: VAL 0
BSR AIFLOT < ENTREE DE LA CONSTANTE 'FN'...
FST FMODN
CMODN1: EQU $
<
<
< S E N S D E L ' O P E R A T I O N :
<
<
DTRAP3: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMSENS-ZERO
BSR APRINT < "S R".
XWOR%7: VAL 0
STZ SENS < SENS=0 : S <-- R A PRIORI...
BSR AIN < ENTREE DU SENS...
CPI "<"
JE DTRAP4 < S <-- R.
IC SENS < SENS=1 : S --> R...
CPI ">"
JNE DTRAP3 < ERREUR...
DTRAP4: EQU $
<
< SORTIE :
<
CVP1: EQU $
BR ALOOP < VERS L'INTERROGATION...
PAGE
<
<
< S O U S - P R O G R A M M E G E N E R A U X
< D ' A C C E S A U X P O I N T S
< F O N C T I O N D E ' S E N S ' :
<
<
SPGS: EQU $
CPZ SENS
JNE SPGS1
SPGR1: EQU $
BSR ASPGPS
JMP SPGS2
SPGS1: EQU $
BSR ASPGPR
SPGS2: EQU $
RSR
SPGR: EQU $
CPZ SENS
JNE SPGR1
JE SPGS1
SPRS: EQU $
CPZ SENS
JNE SPRS1
SPRR1: EQU $
BSR ASPRPS
JMP SPRS2
SPRS1: EQU $
BSR ASPRPR
SPRS2: EQU $
RSR
SPRR: EQU $
CPZ SENS
JNE SPRR1
JE SPRS1
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 :
<
<
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
<
<
< 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
EOT #SIP FONCTION#
PAGE
<
<
< A U C A S O U ...
<
<
FLOC: @
IF 4='F700('0080)'0080,XWOR%,,XWOR%
LOCAL
FLOC: EQU $
XWOR%: VAL 0
SPU: @
IF 3='F700('0080)'0080,XWOR%,,XWOR%
PROG
SPU: EQU $
RSR
XWOR%: VAL 0
SPV: @
IF 3='F700('0080)'0080,XWOR%,,XWOR%
PROG
SPV: EQU $
RSR
XWOR%: VAL 0
SPW: @
IF 3='F700('0080)'0080,XWOR%,,XWOR%
PROG
SPW: EQU $
RSR
XWOR%: VAL 0
PAGE
<
<
< F I N D E L ' O V E R L A Y :
<
<
XWOR%1: VAL $-DEBOV1*NOCMO
LOVL2: EQU ZERO+XWOR%1
IF BUFIN-$,,,XWOR%
IF ATTENTION : L'OVERLAY RECOUVRE LA
IF ZONE EN RECOUVREMENT DE L'ITEM2 !!!
XWOR%: 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 ITEM2-BRANCH
IF $-DEBOV1-XWOR%1,XWOR%,,
IF ATTENTION : LA BRANCHE D'OVERLAY EST TROP LONGUE !!!
XWOR%: VAL 0
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.