DF'SIO5 256-->512'
ED'SIO5 256-->512'
IN0
PAGE
IDP "SIO5 256-->512"
<
<
< C O N V E R S I O N I M A G E 2 5 6
< --> I M A G E 5 1 2 :
<
<
< FONCTION :
< CE MODULE ASSURE LA CONVERSION
< D'UNE IMAGE 256 EN UNE IMAGE 512
< SUIVANT 3 MODES : LE PREMIER PAR
< DUPLICATION 1 POINT --> 4 POINTS
< LE SECOND PAR INTERPOLATION ENTRE
< LES POINTS (2 OU 4) VOISINS, ET
< ENFIN LE DERNIER, OU L'ON TRACE
< UN POINT POUR UN POINT, CE QUI
< PERMET D'AFFICHER 4 IMAGES COTE
< A COTE...
< ENFIN, LE NIVEAU DE CHAQUE
< POINT EST OBTENU EN FAIT PAR
< SOMMATION SUR UNE SPIRALE
< CENTREE AU POINT COURANT, ET
< DE PLUS, ON PEUT NE PAS MAR-
< QUER LES POINTS NOIRS, AFIN DE
< FACILITER LA SUPERPOSITION
< D'IMAGES...
<
<
< DANS L'ORDRE, ON EFFECTUE :
< 1 - UN DECALAGE DE 5 POSITIONS A DROITE DU NIVEAU,
< 2 - UN MASQUAGE PAR 'AD',
< 3 - UN DECALAGE DE 'A2' POSITIONS (DROITE OU GAUCHE),
< 4 - UNE TRANSLATION DE 'A8'.
<
<
< ARGUMENT :
A0:: VAL 0 < MODE DE CONVERSION :
< =0 : PAR DUPLICATION,
< >0 : PAR INTERPOLATION,
< <0 : 1 POINT POUR 1 POINT.
A1:: VAL A0+1 < SELECTION DES PLANS DE MEMOIRE ACTIFS,
< AVEC UNE CONVENTION SOFT INVERSE DE LA
< CONVENTION HARD :
< 0 : PLAN DE MEME RANG INHIBE,
< 1 : PLAN DE MEME RANG ACTIF.
A2:: VAL A1+1 < APRES CALCUL DU NIVEAU 512*512 EQUIVA-
< LENT AU NIVEAU 256*256 ARGUMENT DANS
< 'PNIVO', IL DECALE DE 'A2', ET
< A DROITE SI (A2)<0,
< A GAUCHE SI (A2)>0.
< N O T A : LA COMBINAISON DE 'A1' ET
< 'A2' PERMET DE FAIRE DES SUPERPOSITIONS
< DE 2 IMAGES 256*256 SUR UNE MEME 512*512
< EN PRENANT POUR CHACUNE D'ELLE DES
< MASQUES 'A1' COMPLEMENTAIRES, ET POUR
< 'A2' LES VALEURS RESPECTIVES DE 0 ET -3.
A3:: VAL A2+1 < ACTION INITIALE :
< =0 : EFFACER L'ECRAN 512*512, ET REINI-
< TIALISER LES REGISTRES,
< #0 : NE RIEN FAIRE...
A4:: VAL A3+1 < TRANSLATION SUR X, SI (A0)<0,
A5:: VAL A4+1 < TRANSLATION SUR Y, SI (A0)<0.
A6:: VAL A5+1 < NOMBRE DE POINTS SUR CHAQUE SPIRALE,
A7:: VAL A6+1 < PAS DE PARCOURS DES SPIRALES.
A8:: VAL A7+1 < TRANSLATION DES NIVEAUX JUSTE AVANT LE
< MARQUAGE DES POINTS.
A9:: VAL A8+1 < FAUT-IL TRACER LES POINTS DE NIVEAU
< NUL (NOIR) ???
< =0 : OUI,
< #0 : NON.
AA: VAL A9+1 < DOIT-ON TRANSLATER LES NIVEAUX NOIRS ???
< =0 : OUI,
< #0 : NON...
AB:: VAL AA+1 < DECREMENT DU NIVEAU CENTRAL UTILISE
< POUR CALCULER LE NIVEAU MIMIMUM TOLERABLE
< SUR UNE SPIRALE,
AC:: VAL AB+1 < DE MEME INCREMENT DU NIVEAU CENTRAL
< POUR CALCULER LE NIVEAU MAXIMAL :
< SOIT 'NC' LE NIVEAU DU POINT CENTRAL
< D'UNE SPIRALE, ET 'N' LE NIVEAU DU
< POINT COURANT ; 'N' EST PRIS EN COMPTE
< DANS LA SOMMATION DE LA SPIRALE SI :
< NC-AB <= N <= NC+AC.
AD:: VAL AC+1 < MASQUE DES NIVEAUX.
<
<
XXXIMA: VAL 1
EOT #SIP IMAGE 512#
YYYIMA:: VAL YYYIM1 < 'STORP' FONCTIONNERA PAR ENVOI SEQUEN-
< TIEL DU NIVEAU, DE 'X', DE 'Y' ET ENFIN
< DE L'ORDRE DE TRACE RASTER...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
<
< CONSTANTES DIVERSES :
<
IPREM: WORD K-I < INDICATEUR DE PREMIER PASSAGE.
FINFIN: FLOAT 1000000 < POUR FAIRE UN OVER-SCREEN.
IMODE: WORD 0 < MODE DE CONVERSION :
< =0 : PAR DUPLICATION,
< #0 : PAR INTERPOLATION.
ADECA2: WORD 0 < ARGUMENT 'A2' : AMPLITUDE DE DECALAGE
< DES NIVEAUX CALCULES PAR 'PNIVO'.
AXMAX: WORD XMAX < COORDONNEE 'X' MAXIMALE,
AYMAX: WORD YMAX < POUR INVERSER LES AXES 'Y' BASSE
< ET MOYENNE DEFINITION ET COORDONNEE
< 'Y' MAXIMALE.
NIV00: FLOAT 0 < NIVEAU(XR,YR),
NIV10: FLOAT 0 < NIVEAU(XR+1,YR),
NIV01: FLOAT 0 < NIVEAU(XR,YR+1).
XWOR%3: VAL NIVMAX+I < NOMBRE DE NIVEAUX EN 256*256.
XWOR%1: VAL NIV256/XWOR%3=K < DECALAGE POUR PASSER D'UN NIVEAU EN
< 256*256 A UN NIVEAU EN 512*512.
XWOR%2: VAL XXXMOY+XXXMOY=K < POUR TENIR COMPTE DU FAIT QUE LE NIVEAU
< ARGUMENT 256*256 EST MULTIPLIE PAR 4.
XWOR%4: VAL XWOR%1-XWOR%2
FNIVO: FLOAT <BIT>XWOR%4<K<K < POUR DECALER UN NOMBRE FLOTTANT A
< GAUCHE DE 'XWOR%4' POSITIONS...
FWORK4: FLOAT 0 < VARIABLE DE MANOEUVRE...
TRANPX: WORD 0 < 'A4',
TRANPY: WORD 0 < 'A5'.
INOIR: WORD 0 < =0 : TRACER LES POINTS DE NIVEAU NUL,
< #0 : NE PAS LES TRACER.
TRANIV: WORD 0 < TRANSLATION DES NIVEAUX AVANT LE MAR-
< QUAGE DES POINTS.
NIMASK: WORD 0 < MASQUE DES NIVEAUX ('AD').
ITRANI: WORD 0 < DOIT-ON TRANSLATER LES NIVEAUX NOIRS ???
< =0 : OUI,
< #0 : NON...
<
< DEFINITION DE LA SPIRALE :
<
CUMUL: WORD 0 < SIGMA(NIVEAU(XS,YS)).
PASQ: WORD 0 < ARGUMENT 'A4'.
DELTAX: WORD 0
DELTAY: WORD 0
LB: WORD 0 < LONGUEUR DES
LB0: WORD 0 < BRANCHES DE LA SPIRALE.
NP: WORD 0 < NOMBRE DE POINT COURANT,
NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
NPPC: WORD 0 < NOMBRE DE POINTS PRIS EN COMPTE SUR LA
< SPIRALE COURANTE,
FNP: FLOAT 0 < ET SA VALEUR EN FLOTTANT...
DECNIV: WORD 0 < PARAMETRE 'AB',
INCNIV: WORD 0 < PARAMETRE 'AC'.
MINNIV: WORD 0 < NIVEAU MINIMAL TOLERABLE SUR LA SPIRALE
< COURANTE,
MAXNIV: WORD 0 < NIVEAU MAXIMAL TOLERABLE SUR LA SPIRALE
< COURANTE.
<
< RELAIS DIVERS :
<
APNIVO: WORD PNIVO < CALCUL D'UN NIVEAU 512...
ASTORQ: WORD STORQ < 'STORP' AVEC TEST PREALABLE DES NIVEAUX
< NULS.
ASPIR: WORD SPIR < RECUPERATION DU NIVEAU MOYEN SUR UNE
< SPIRALE CENTREE SUR (XR,YR).
AADRAA: WORD ADRAA < SIMULATION DE 'ADR''A,A' POUR DES
< NOMBRES FLOTTANTS.
APTRXY: WORD PTRXY < SOUS-PROGRAMME DE TRANSLATION DE (X,Y).
XXXIMA: VAL 2
EOT #SIP IMAGE 512#
<
< ADRESSE DES REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
XXXIMA: VAL 4
EOT #SIP IMAGE 512#
<
<
< P R O G R A M M E :
<
<
PROG
XXXIMA: VAL 3
EOT #SIP IMAGE 512#
XXXIMA: VAL 5
EOT #SIP IMAGE 512#
PAGE
<
<
< C A L C U L D ' U N N I V E A U S U R ( 0 , 2 5 5 ) :
<
<
< ARGUMENT :
< (A,B)=NIVEAU DE GRIS DE (0,NIVMAX) MULTIPLIE PAR 4,
<
<
< RESULTAT :
< (A)=NIVEAU ENTIER CADRE ET DECALE COMME DESIRE...
<
<
PNIVO: EQU $
PSR X < SAUVEGARDES...
FMP FNIVO < CONVERSION (0,7) --> (0,255).
BSR AFIX < ET CONVERSION ENTIER...
AND NIMASK < ET MASQUAGE, AFIN D'ELIMINER, PAR EXEM-
< PLE DES BITS DE QUEUE, FACILITANT
< AINSI LA SUPERPOSITION D'IMAGES, TOUT
< EN UTILISANT L'INTERPOLATION...
LX ADECA2 < (X)=DECALAGE DEMANDE PAR 'A2' :
CPZR X < QUEL SENS ???
JE PNIVO1 < RIEN A FAIRE...
JG PNIVO2 < A GAUCHE...
NGR X,X
SLRS K,X < A DROITE SI NEGATIF...
JMP PNIVO1
PNIVO2: EQU $
SLLS K,X < A GAUCHE SI POSITIF...
PNIVO1: EQU $
JANE PNIVO3 < OK, NIVEAU NON NUL...
CPZ ITRANI < S'IL EST NOIR, DOIT-ON LE TRANSLATER ???
JNE PNIVO4 < NON...
PNIVO3: EQU $ < OUI...
AD TRANIV < ET ENFIN, TRANSLATION...
PNIVO4: EQU $
PLR X < RESTAURATIONS...
RSR
PAGE
<
<
< S T O R E P O I N T :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES DE POINT,
< (A)=NIVEAU DU POINT.
<
<
STORQ: EQU $
CPZR X
JL STORQ2 < (X)<0...
XR A,X
CP AXMAX
XR A,X
JG STORQ2 < (X)>'XMAX'...
CPZR Y
JL STORQ2 < (Y)<0...
XR A,Y
CP AYMAX
XR A,Y
JG STORQ2 < (Y)>'YMAX'...
CPZ INOIR < FAUT-IL TRACER LES POINTS NOIRS ???
JE STORQ1 < OUI, ALLONS-Y QUELQUE SOIT LE NIVEAU...
JAE STORQ2 < NON, ET LE NIVEAU COURANT EST NUL, ON
< SORT SANS TRACER...
STORQ1: EQU $
BSR ASTORP < TRACE DU POINT (X,Y) AVEC LE NIVEAU (A).
STORQ2: EQU $
RSR
PAGE
<
<
< S I M U L A T I O N D E A D R A ,A :
<
<
< FONCTION :
< CE MODULE DOUBLE LE NOMBRE
< FLOTTANT ARGUMENT (A,B).
<
<
ADRAA: EQU $
FST FWORK4
FAD FWORK4
RSR
PAGE
<
<
< T R A N S L A T I O N D E ( X , Y ) :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES.
<
<
< RESULTATS :
< (X,Y)=COORDONNEES TRANSLATEES DE (TRANPX,TRANPY).
<
<
PTRXY: EQU $
XR A,X
AD TRANPX < TRANSLATION DE 'X',
XR A,X
XR A,Y
AD TRANPY < TRANSLATION DE 'Y'.
XR A,Y
RSR
PAGE
<
<
< S O M M A T I O N S U R U N E S P I R A L E
< C E N T R E E S U R ( X S , Y S ) D E S
< N I V E A U X D E S E S P O I N T S :
<
<
SPIR: EQU $
<
< INITIALISATION DE LA SPIRALE :
<
LA XR
LB YR
PSR A,B < SAUVEGARDE DU POINT (XR,YR).
STZ CUMUL < CUMUL <-- 0.
STZ NP < NP=NOMBRE DE POINTS TRAITES.
STZ NPPC < NPPCNOMBRE DE POINTS PRIS EN COMPTE DANS
< LA SOMMATION, C'EST-A-DIRE QUI NE
< SONT PAS HORS-ECRAN, ET DONT LE
< NIVEAU EST DANS (MINNIV,MAXNIV)...
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...
<
< ACCES AU NIVEAU DU POINT COURANT :
<
BSR ASPGPR < A=NIVEAU(XR,YR),
LR A,B < (B)=SAUVEGARDE DU NIVEAU COURANT,
LA NP
CPI 1 < EST-ON SUR LE PREMIER POINT (OU POINT
< CENTRAL) ???
LR B,A < RESTAURE : (A)=NIVEAU(XR,YR).
JG SPMOY7 < NON, IL S'AGIT DES AUTRES POINTS...
<
< CAS DU POINT CENTRAL :
< (NOTA : IL NE PEUT ETRE
< OVER-SCREEN, PUISQU'IL
< S'AGIT DE (XR,YR)
<
AD INCNIV
STA MAXNIV < CALCUL DU NIVEAU MAXIMAL TOLERABLE,
LR B,A
SB DECNIV
STA MINNIV < ET DU NIVEAU MINIMAL TOLERABLE...
LR B,A
JMP SPMOY9 < VERS LA PRISE EN COMPTE DU POINT CENTRAL.
<
< CAS DES AUTRES POINTS :
<
SPMOY7: EQU $
CP MAXNIV
JG SPMOY4 < IGNORE, CAR N > MAXNIV...
CP MINNIV
JL SPMOY4 < IGNORE, CAR N < MINNIV...
<
< CUMUL DES POINTS :
<
SPMOY9: EQU $
IC NPPC < CUMUL DES POINTS PRIS EN COMPTE...
AD CUMUL < ET
STA CUMUL < CUMULE...
<
< PASSAGE AU POINT SUIVANT :
<
SPMOY4: EQU $
LA XR
AD DELTAX < CHANGEMENT DE
STA XR
LA YR
AD DELTAY < POINT COURANT (XR,YR).
STA YR
DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE :
JG SPMOY2 < OK, IL EN RESTE...
CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
< LA LONGUEUR COURANTE DES BRANCHES ???
JNE SPMOY5 < NON (DX#0) ...
IC LB0 < OUI (DX=0) ...
SPMOY5: EQU $
LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE
NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT
LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE
< (0,-1,1,0)...
STA DELTAX < DELTAX=-DELTAY,
STB DELTAY < DELTAY=DELTAX.
JMP SPMOY1 < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XR,YR) :
<
SPMOY3: EQU $
PLR A,B
STA XR < RESTAURATION
STB YR < DE (XR,YR),
<
< NORMALISATION DU CUMUL :
<
LA NPPC
FLT
FST FNP < FNP=NOMBRE FLOTTANT DE POINTS PRIS EN
< COMPTE...
LA CUMUL
FLT
FDV FNP
RSR
PAGE
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ IPREM < EST-CE LE PREMIER PASSAGE ???
JGE SPU1 < NON...
<
< PREMIER PASSAGE : ENTREE DES ARGUMENTS :
<
IC IPREM < MEMORISATION DE CETTE ENTREE...
LXI A0
BSR ASPCT
BSR AROND
STA IMODE
LXI A4
BSR ASPCT
BSR AROND
STA TRANPX < A PRIORI, QUELQUE SOIT (A0)...
LXI A5
BSR ASPCT
BSR AROND
STA TRANPY < A PRIORI, QUELQUE SOIT (A0)...
LAI PAGER
BSR AGPCDA < POSITIONNEMENT SUR LA PAGE DES REGISTRES
< DE LA 'CDAJ'...
<
< DEFINITION DE LA SPIRALE :
<
LXI A6
BSR ASPCT
BSR AROND
STA NPM < NOMBRE DE POINTS MAX...
LXI A7
BSR ASPCT
BSR AROND
STA PASQ < PAS DE PARCOURS...
LXI AB
BSR ASPCT
BSR AROND
STA DECNIV < POUR CALCULER LE MINIMUM TOLERABLE,
LXI AC
BSR ASPCT
BSR AROND
STA INCNIV < ET LE MAXIMUM...
<
< DEFINITION DU TRACE :
<
LXI A8
BSR ASPCT
BSR AROND
STA TRANIV < ENTREE DE LA TRANSLATION DES NIVEAUX.
LXI AD
BSR ASPCT
BSR AROND
STA NIMASK < ENTREE DU MASQUE DES NIVEAUX.
LXI AA
BSR ASPCT
BSR AROND
STA ITRANI < DOIT-ON TRANSLATER LES NIVEAUX NOIRS ???
LXI A9
BSR ASPCT
BSR AROND
STA INOIR < FAUT-IL MARQUER LES NOIRS (AU FER ROUGE)?
LXI A3
BSR ASPCT
BSR AROND
JANE SPU4 < (A3)#0 : ON N'EFFACE PAS...
<
< (A3)=0 : EFFACEMENT ET REINITIALISATION :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
SPU4: EQU $
<
< SELECTION DES PLANS ET DECALAGE :
<
LXI A1
BSR ASPCT
BSR AROND
EORI MOCD < ON INVERSE LES CONVENTIONS DU SOFT
< POUR ETRE COMPATIBLE HARD...
STA MCDAJ < PREPARATION DE LA LISTE DE SELECTION
< DES PLANS MEMOIRE,
LA ARPLAN < (A)=ADRESSE DU REGSITRE 'RPLAN',
BSR APWCDA < SELECTION DES PLANS DEMANDES...
LXI A2
BSR ASPCT
BSR AROND
STA ADECA2 < DECALAGE SUR CHAQUE NIVEAU...
<
< POSITIONNEMENT SUR LE POINT PRINCIPAL :
<
SPU1: EQU $
LX XR
LY YR
ADR X,X < ON SE PLACE EN (XR,YR)
ADR Y,Y < EN DOUBLANT LA DEFINITION...
LA AYMAX
SBR A,Y
NGR Y,Y < LES AXES 'Y' BASSE ET MOYENNE DEFINITION
< ETANT INVERSES...
CPZ IMODE < QUEL EST LE MODE DE CONVERSION ???
JG SPU2 < PAR INTERPOLATION...
JL SPU5 < UN POINT POUR UN POINT...
<
< CONVERSION PAR DUPLICATION :
<
BSR APTRXY < TRANSLATION DE (X,Y)...
BSR ASPIR < (A)=NIVEAU(XR,YR),
BSR AADRAA < ET ON LE MULTIPLIE PAR 4
BSR AADRAA < PAR COMPATIBILITE AVEC L'INTERPOLATION...
BSR APNIVO < CALIBRAGE.
BSR ASTORQ < MARQUAGE DE (X,Y),
ADRI I,X
BSR ASTORQ < MARQUAGE DE (X+1,Y),
ADRI -I,Y
BSR ASTORQ < MARQUAGE DE (X+1,Y-1),
ADRI -I,X
BSR ASTORQ < MARQUAGE DE (X,Y-1).
ADRI I,Y
JMP SPU3 < VERS LA SORTIE...
<
< UN POINT POUR UN POINT :
<
SPU5: EQU $
LR X,A
XWOR%1: VAL XMAX+I/NMOTL/NBITMO
SLRS XWOR%1=K < REDUCTION DE 'X',
LR A,X
LR Y,A
XWOR%1: VAL YMAX+I/NLIG
SLRS XWOR%1=K < REDUCTION DE 'Y',
LR A,Y
BSR APTRXY < TRANSLATION DE (X,Y)...
BSR ASPIR < (A)=NIVEAU(XR,YR),
BSR AADRAA < ON LE
BSR AADRAA < MULTIPLIE PAR 4...
BSR APNIVO < ON LE CALIBRE,
BSR ASTORQ < ET ON MARQUE (X,Y)...
JMP SPU3 < VERS LA SORTIE...
<
< CONVERSION PAR INTERPOLATION :
<
SPU2: EQU $
BSR APTRXY < TRANSLATION DE (X,Y)...
BSR ASPIR < (A)=NIVEAU(XR,YR),
FST NIV00 < ET SAVE...
BSR AADRAA < ON LE MULTIPLIE PAR 4
BSR AADRAA < PAR COMPATIBILITE AVEC L'INTERPOLATION
< ENTRE 4 POINTS POUR LE POINT "CENTRAL"...
BSR APNIVO < CALIBRAGE,
BSR ASTORQ < (2*XR,2*YR) <-- 4*NIVEAU(XR,YR).
IC XR
ADRI I,X
BSR ASPIR < (A)=NIVEAU(XR+1,YR),
FST NIV10 < ET SAVE...
FAD NIV00 < (A)=NIVEAU(XR,YR)+NIVEAU(XR+1,YR),
BSR AADRAA < ON LE MULTIPLIE PAR 2 PAR COMPATIBILITE
< AVEC L'INTERPOLATION ENTRE 4 POINTS...
BSR APNIVO < CALIBRAGE,
BSR ASTORQ < (2*XR+1,2*YR) <-- 2*(NIVEAU(XR,YR)+
< NIVEAU(XR+1,YR)).
DC XR
ADRI -I,X
IC YR
ADRI -I,Y
BSR ASPIR < (A)=NIVEAU(XR,YR+1),
FST NIV01 < ET SAVE...
FAD NIV00 < (A)=NIVEAU(XR,YR)+NIVEAU(XR,YR+1),
BSR AADRAA < ON LE MULTIPIE PAR 2 PAR COMPATIBILITE
< AVEC L'INTERPOLATION ENTRE 4 POINTS.
BSR APNIVO < CALIBRAGE,
BSR ASTORQ < (2*XR,2*YR-1) <-- 2*(NIVEAU(XR,YR)+
< NIVEAU(XR,YR+1)).
IC XR
ADRI I,X
BSR ASPIR < (A)=NIVEAU(XR+1,YR+1),
FAD NIV00 < ET SOMMATION
FAD NIV10 < SUR LES
FAD NIV01 < 4 SOMMETS,
BSR APNIVO < CALIBRAGE,
BSR ASTORQ < (2*XR+1,2*YR-1) <-- NIVEAU(XR,YR)+
< NIVEAU(XR+1,YR)+
< NIVEAU(XR,YR+1)+
< NIVEAU(XR+1,YR+1).
DC XR
ADRI -I,X
DC YR
ADRI I,Y
<
< ET SORTIE :
<
SPU3: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
:F
:F
< <<'SIO5 256-->512'
DF'SIO5 512 1'
ED'SIO5 512 1'
IN0
PAGE
IDP "SIO5 512 1"
<
<
< E N V O I A U S Y S T E M E 5 1 2 * 5 1 2 1 :
<
<
< FONCTION :
< CE MODULE SQUELETTIQUE ENVOIE
< L'IMAGE COURANTE SEUILLEE SUR LE
< SYSTEME 512*512 VIA LA LIGNE
< ASSIGNEE A L'UNITE '0B.
<
<
< ARGUMENT :
A0:: VAL 0 < SEUIL AU DELA DUQUEL ON EST BLANC,
< ET EN DECA NOIR...
<
<
LOCAL
FLOC: EQU $
S0:: VAL "S0"
S2:: VAL "S2"
S9:: VAL "S9"
CHECK:: VAL "00" < CHECK-SUM BIDON...
MEM0:: VAL "03" < ADRESSE DE LA MEMOIRE ASSIGNEE
MEM1:: VAL "F8" < AU CONTROLEUR '365'.
CMD:: VAL "01" < NUMERO DU REGISTRE DE COMMANDE...
LONG3:: VAL "03"
LONG5:: VAL "05"
CR:: VAL '0D
LF:: VAL '0A
HEAD: EQU $ < EN-TETE DE L'ENVOI :
WORD S0;LONG3
ASCI "0000"
WORD CHECK
BYTE CR;LF
LHEAD:: VAL $-HEAD*NOCMO
ERASE: EQU $ < EFFACEMENT DE L'IMAGEUR :
WORD S2;LONG5
WORD MEM0;MEM1;CMD
ASCI "F9"
WORD CHECK
BYTE CR;LF
LERASE:: VAL $-ERASE*NOCMO
DELTX: EQU $ < ENVOI DE DELTAX=0 :
WORD S2;LONG5
WORD MEM0;MEM1;"0B"
ASCI "FF"
WORD CHECK
BYTE CR;LF
LDELTX:: VAL $-DELTX*NOCMO
DELTY: EQU $ < ENVOI DE DELTAY=0 :
WORD S2;LONG5
WORD MEM0;MEM1;"0F"
ASCI "FF"
WORD CHECK
BYTE CR;LF
LDELTY:: VAL $-DELTY*NOCMO
FORTX: EQU $ < ENVOI DE POIDS FORT DES X=0 :
WORD S2;LONG5
WORD MEM0;MEM1;"11"
ASCI "FF"
WORD CHECK
BYTE CR;LF
LFORTX:: VAL $-FORTX*NOCMO
FORTY: EQU $ < ENVOI DE POIDS FORT DES Y=0 :
WORD S2
WORD LONG5
WORD MEM0;MEM1;"15"
ASCI "FF"
WORD CHECK
BYTE CR;LF
LFORTY:: VAL $-FORTY*NOCMO
SENDX: EQU $ < ENVOI DE LA COORDONNEE X :
WORD S2;LONG5
WORD MEM0;MEM1;"13"
XSENDX: WORD 0 < COORDONNEE X.
WORD CHECK
BYTE CR;LF
LSENDX:: VAL $-SENDX*NOCMO
SENDY: EQU $ < ENVOI DE LA COORDONNEE Y :
WORD S2;LONG5
WORD MEM0;MEM1;"17"
YSENDY: WORD 0 < COORDONNEE Y.
WORD CHECK
BYTE CR;LF
LSENDY:: VAL $-SENDY*NOCMO
DRAW: EQU $ < TRACE DU POINT :
WORD S2;LONG5
WORD MEM0;MEM1;CMD
ASCI "EE"
WORD CHECK
BYTE CR;LF
LDRAW:: VAL $-DRAW*NOCMO
TAIL: EQU $ < FIN DU TRACE :
WORD S9;LONG3
ASCI "0000"
WORD CHECK
BYTE CR;LF
LTAIL:: VAL $-TAIL*NOCMO
<
< DEMANDES AU SYSTEME :
<
DEMSEN: BYTE '0B;'02 < ENVOI DES ORDRES AU 68000 :
WORD 0 < ADRESSE DU BUFFER,
WORD 0 < ET LONGUEUR DE L'ECHANGE.
<
< RELAI DE SOUS-PROGRAMMES :
<
ASEND: WORD SEND < ENVOI D'UN MESSAGE.
AHEXA: WORD HEXA < CONVERSIO HEXA --> BINAIRE.
<
< DIVERS :
<
ABUFVX: WORD 0 < RELAI INDEXE VARIABLE.
PREM: WORD 0 < POUR DETECTER LE PREMIER APPEL.
SEUIL: WORD 0 < 'A0' : SEUIL BLANC/NOIR.
PROG
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ PREM < EST-CE LE PREMIER TOUR ???
JNE SPU1 < NON...
<
< INITIALISATIONS DU PREMIER TOUR :
<
IC PREM < MEMORISATION...
LAD HEAD
LXI LHEAD
BSR ASEND < ENVOI DE L'EN-TETE,
LAD ERASE
LXI LERASE
BSR ASEND < EFFACEMENT DE L'ECRAN,
LAD DELTX
LXI LDELTX
BSR ASEND < ENVOI DE DELTAX=0,
LAD DELTY
LXI LDELTY
BSR ASEND < ENVOI DE DELTAY=0,
LAD FORTX
LXI LFORTX
BSR ASEND < ENVOI DE POIDS FORT DES X=0,
LAD FORTY
LXI LFORTY
BSR ASEND < ENVOI DE POIDS FORT DES Y=0.
LXI A0
BSR ASPCT
BSR AROND
STA SEUIL < RECUPERATION DU SEUIL NOIR/BLANC.
<
< FOIS SUIVANTES :
<
SPU1: EQU $
BSR ASPGPR < (A)=NIVEAU (XR,YR) :
CP SEUIL < SEUILLAGE...
JL SPU2 < POINT "NOIR"...
LAD XSENDX
LB XR
BSR AHEXA < ENVOI DES COORDONNEES DES POINTS
< "BLANCS"...
LAD YSENDY
LB YR
NGR B,B
ADRI NLIGM1,B < LES AXES DES 'Y' SONT INVERSES...
BSR AHEXA
LAD SENDX
LXI LSENDX
BSR ASEND < ENVOI DE XR,
LAD SENDY
LXI LSENDY
BSR ASEND < ENVOI DE YR,
LAD DRAW
LXI LDRAW
BSR ASEND < ET MARQUAGE DU POINT (XR,YR).
SPU2: EQU $
<
< CAS DE LA DERNIERE FOIS :
<
LA XR
AND YR
CPI NLIGM1(NPOLM1 < EST-CE LE DERNIER POINT ???
JNE SPU3 < NON...
LAD TAIL
LXI LTAIL
BSR ASEND < OUI, ON ENVOIE LA QUEUE...
SPU3: EQU $
LA XR
FLT
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
LA YR
FLT
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
<
<
< E N V O I D ' U N M E S S A G E :
<
<
< ARGUMENTS :
< A=ADDRESSE DU MESSAGE,
< X=LONGUEUR.
<
<
SEND: EQU $
PSR A,X
SLLS NOCMO=0
STA DEMSEN+1 < ADRESSE OCTET DU MESAGE,
STX DEMSEN+2 < ET SA LONGUEUR.
LAD DEMSEN
SVC 0 < ON L'ENVOIE AU 68000...
PLR A,X
RSR
<
<
< C O N V E R S I O N H E X A --> A S C I :
<
<
< ARGUMENTS :
< A=ADRESSE OU RANGER LE CODE ASCI,
< B=VALEUR A CONVERTIR.
<
<
HEXA: EQU $
PSR A,B,X
SBT 0
STA ABUFVX < GENERATION D'UN RELAI INDEXE VERS LA
< ZONE DE RANGEMENT DE L'ASCI.
LXI 0 < (X)=INDEX DE RANGEMENT,
LAI '00FF
EORR A,B < EN EFFET, LE BUS 68000 EST INVERSE...
SWBR B,B < CADRAGE DE L'OCTET A CODER.
HEXA1: EQU $
LAI 0
SLLD 4 < DECONCATENATION,
CPI 9 < CHIFFRE OU LETTRE ???
JLE HEXA2 < CHIFFRE...
ADRI "A"-"9"-1,A < LETTRE...
HEXA2: EQU $
ADRI "0",A < CONVERSION ASCI,
STBY &ABUFVX < ET RANGEMENT DANS LE BUFFER...
ADRI 1,X < AU SUIVANT,
LR X,A
CPI NOCMO < S'IL EXISTE...
JL HEXA1 < OUI...
PLR A,B,X
RSR
:F
:F
< <<'SIO5 512 1'
DF'SIO5 512-->256'
ED'SIO5 512-->256'
IN0
PAGE
IDP "SIO5 512-->256"
<
<
< C O N V E R S I O N I M A G E 5 1 2
< --> I M A G E 2 5 6 :
<
<
< FONCTION :
< CE MODULE ASSURE LA CONVERSION
< D'UNE IMAGE 256 EN UNE IMAGE 512
< SUIVANT 2 MODES :
<
< 1 - LE PREMIER PAR MOYENNAGE : ON PREND
< UN PAVE 2*2 DE L'IMAGE 512*512, ET ON
< Y FAIT LA MOYENNE DES NIVEAUX ; CETTE
< MOYENNE RAMENEE ENSUITE DANS (0,7) EST
< LE NIVEAU DE GRIS DU POINT RESIDENT
< COURANT (XR,YR).
<
< 2 - LE SECOND : ON PREND DANS L'IMAGE
< 512*512 UNE FENETRE 256*256, ET LES POINTS
< SONT ASSOCIES 1 A 1 ; LE NIVEAU (0,255)
< EST D'ABORD MASQUE PAR 'A3', PUIS DECALE
< A DROITE PAR 'A4'...
<
<
< ARGUMENT :
A0:: VAL 0 < MODE DE CONVERSION :
< =0 : PAR MOYENNAGE SUR UN PAVE 2*2,
< #0 : UN POINT POUR UN POINT.
A1:: VAL A0+1 < TRANSLATION SUR OX,
A2:: VAL A1+1 < TRANSLATION SUR OY.
A3:: VAL A2+1 < MASQUE DES NIVEAUX DANS (0,255) LORSQUE
< (A0)#0,
A4:: VAL A3+1 < DECALAGE A DROITE DES NIVEAUX APRES LE
< MASQUAGE LORSQUE (A0)#0.
<
<
XXXIMA: VAL 1
EOT #SIP IMAGE 512#
YYYIMA:: VAL YYYIM1 < 'STORP' FONCTIONNERA PAR ENVOI SEQUEN-
< TIEL DU NIVEAU, DE 'X', DE 'Y' ET ENFIN
< DE L'ORDRE DE TRACE RASTER...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
<
< CONSTANTES DIVERSES :
<
IPREM: WORD K-I < INDICATEUR DE PREMIER PASSAGE.
FINFIN: FLOAT 1000000 < POUR FAIRE UN OVER-SCREEN.
IMODE: WORD 0 < MODE DE CONVERSION :
< =0 : PAR MOYENNAGE SUR UN PAVE 2*2,
< #0 : UN POINT POUR UN POINT.
AMASKN: WORD 0 < MASQUE 'A3',
ADECA: WORD 0 < DECALAGE 'A4'.
AXMAX: WORD XMAX < COORDONNEE 'X' MAXIMALE,
AYMAX: WORD YMAX < POUR INVERSER LES AXES 'Y' BASSE
< ET MOYENNE DEFINITION ET COORDONNEES
< 'Y' MAXIMALE.
NIV00: FLOAT 0 < NIVEAU(X,Y),
NIV10: FLOAT 0 < NIVEAU(X+1,Y),
NIV01: FLOAT 0 < NIVEAU(X,Y+1),
NIV11: FLOAT 0 < NIVEAU(X+1,Y+1).
XWOR%3: VAL NIVMAX+I < NOMBRE DE NIVEAUX EN 256*256.
XWOR%1: VAL NIV256/XWOR%3=K < DECALAGE POUR PASSER D'UN NIVEAU EN
< 256*256 A UN NIVEAU EN 512*512.
XWOR%2: VAL XXXMOY+XXXMOY=K < POUR TENIR COMPTE DU FAIT QUE LE NIVEAU
< ARGUMENT 256*256 EST MULTIPLIE PAR 4.
XWOR%4: VAL XWOR%1+XWOR%2
FNIVO: FLOAT <BIT>XWOR%4<K<K < POUR DECALER UN NOMBRE FLOTTANT A
< DROITE DE 'XWOR%4' POSITIONS...
TRANPX: WORD 0 < 'A1',
TRANPY: WORD 0 < 'A2'.
<
< RELAIS DIVERS :
<
ALOADQ: WORD LOADQ < 'LOADP' AVEC VALIDATION DE (X,Y).
APTRXY: WORD PTRXY < SOUS-PROGRAMME DE TRANSLATION DE (X,Y).
XXXIMA: VAL 2
EOT #SIP IMAGE 512#
XXXIMA: VAL 4
EOT #SIP IMAGE 512#
<
<
< P R O G R A M M E :
<
<
PROG
XXXIMA: VAL 3
EOT #SIP IMAGE 512#
XXXIMA: VAL 5
EOT #SIP IMAGE 512#
PAGE
<
<
< L O A D P O I N T :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES DU POINT.
<
<
< RESULTATS :
< (A,B)=NIVEAU FLOTTANT DE CE POINT.
<
<
LOADQ: EQU $
LR X,A
JAL LOADQ1 < (X)<0...
CP AXMAX
JG LOADQ1 < (X)>'XMAX'...
LR Y,A
JAL LOADQ1 < (Y)<0...
CP AYMAX
JG LOADQ1 < (Y)>'YMAX'...
BSR ALOADP < (A)=NIVEAU D'UN POINT DANS L'ECRAN,
LOADQ2: EQU $
BSR AFLT < ET ON LE FLOTTE...
RSR
LOADQ1: EQU $
LAI XXNOIR < CAS DES POINTS HORS-ECRAN, ON LES REND
< NOIR...
JMP LOADQ2
PAGE
<
<
< T R A N S L A T I O N D E ( X , Y ) :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES.
<
<
< RESULTATS :
< (X,Y)=COORDONNEES TRANSLATEES DE (TRANPX,TRANPY).
<
<
PTRXY: EQU $
XR A,X
AD TRANPX < TRANSLATION DE 'X',
XR A,X
XR A,Y
AD TRANPY < TRANSLATION DE 'Y'.
XR A,Y
RSR
PAGE
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ IPREM < EST-CE LE PREMIER PASSAGE ???
JGE SPU1 < NON...
<
< PREMIER PASSAGE : ENTREE DES ARGUMENTS :
<
IC IPREM < MEMORISATION DE CETTE ENTREE...
LXI A0
BSR ASPCT
BSR AROND
STA IMODE
LXI A1
BSR ASPCT
BSR AROND
STA TRANPX < TRANSLATION SUR OX,
LXI A2
BSR ASPCT
BSR AROND
STA TRANPY < TRANSLATION SUR OY.
LXI A3
BSR ASPCT
BSR AROND
STA AMASKN < MASQUE DES NIVEAUX (0,255),
LXI A4
BSR ASPCT
BSR AROND
STA ADECA < DECALAGE A DROITE DES NIVEAUX (0,255).
<
< POSITIONNEMENT SUR LE POINT PRINCIPAL :
<
SPU1: EQU $
LX XR
LY YR
ADR X,X
ADR Y,Y
LA AYMAX
SBR A,Y < INVERSION DES AXES OY...
NGR Y,Y < ON SE PLACE AU POINT :
< (X,Y)=(2*XR,2*YR)...
CPZ IMODE < QUEL EST LE MODE DE CONVERSION ???
JE SPU2 < PAR MOYENNAGE...
<
< CONVERSION 1 POUR 1 :
<
LR X,A
XWOR%1: VAL XMAX+I/NMOTL/NBITMO
SLRS XWOR%1=K < REDUCTION DE 'X',
LR A,X
LR Y,A
XWOR%1: VAL YMAX+I/NLIG
SLRS XWOR%1=K < REDUCTION DE 'Y',
LR A,Y
BSR APTRXY < TRANSLATION DE (X,Y),
BSR ALOADQ < (A,B)=NIVEAU(X,Y) FLOTTANT,
BSR AFIX < (A)=NIVEAU(X,Y),
AND AMASKN < QUE L'ON MASQUE,
PSR X
LX ADECA
SLRS K,X < QUE L'ON DECALE A GAUCHE,
PLR X
ANDI NIVMAX < ET ENFIN QUE L'ON CALCULE MODULO...
JMP SPU5 < VERS LE MARQUAGE RESIDENT...
<
< MOYENNAGE :
<
SPU2: EQU $
BSR APTRXY < ET TRANSLATION DE (X,Y).
BSR ALOADQ
FST NIV00 < NIVEAU(X,Y),
ADRI I,X
BSR ALOADQ
FST NIV01 < NIVEAU(X+1,Y),
ADRI -I,Y
BSR ALOADQ
FST NIV11 < NIVEAU(X+1,Y-1),
ADRI -I,X
BSR ALOADQ
FST NIV10 < NIVEAU(X,Y-1).
ADRI I,Y
FAD NIV11
FAD NIV01
FAD NIV00
FDV FNIVO < ET MOYENNAGE...
BSR AROND < ET ENFIN, CONVERSION ENTIERE...
<
< TRACE DU RESIDENT :
<
SPU5: EQU $
BSR ASPRPR < (XR,YR) <-- (A)...
<
< ET SORTIE :
<
SPU3: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
:F
:F
< <<'SIO5 512-->256'
DF'SIO5 256<-->512'
ED'SIO5 256<-->512'
IN0
PAGE
IDP "SIO5 256<-->512"
<
<
< C O N V E R S I O N S 2 5 6 <--> 5 1 2 :
<
<
< FONCTION :
< CE MODULE ASSURE DES
< CONVERSIONS SIMPLES DANS
< LES 2 SENS.
<
<
< ARGUMENT :
A20:: VAL '20 < CHOIX DU SENS DE LA CONVERSION :
< =0 : 256 --> 512,
< #0 : 512 --> 256.
<
<
< C O N V E R S I O N I M A G E 2 5 6
< --> I M A G E 5 1 2 :
<
<
< FONCTION :
< CE MODULE ASSURE LA CONVERSION
< D'UNE IMAGE 256 EN UNE IMAGE 512
< PAR DUPLICATION 1 POINT --> 4 POINTS.
<
<
< DANS L'ORDRE, ON EFFECTUE :
< 1 - UN DECALAGE DE 5 POSITIONS A DROITE DU NIVEAU,
< 2 - UN MASQUAGE PAR 'AD',
< 3 - UN DECALAGE DE 'A2' POSITIONS (DROITE OU GAUCHE).
<
<
< ARGUMENT :
A1:: VAL '01 < SELECTION DES PLANS DE MEMOIRE ACTIFS,
< AVEC UNE CONVENTION SOFT INVERSE DE LA
< CONVENTION HARD :
< 0 : PLAN DE MEME RANG INHIBE,
< 1 : PLAN DE MEME RANG ACTIF.
A2:: VAL A1+1 < APRES CALCUL DU NIVEAU 512*512 EQUIVA-
< LENT AU NIVEAU 256*256 ARGUMENT DANS
< 'PNIVO', IL DECALE DE 'A2', ET
< A DROITE SI (A2)<0,
< A GAUCHE SI (A2)>0.
< N O T A : LA COMBINAISON DE 'A1' ET
< 'A2' PERMET DE FAIRE DES SUPERPOSITIONS
< DE 2 IMAGES 256*256 SUR UNE MEME 512*512
< EN PRENANT POUR CHACUNE D'ELLE DES
< MASQUES 'A1' COMPLEMENTAIRES, ET POUR
< 'A2' LES VALEURS RESPECTIVES DE 0 ET -3.
A3:: VAL A2+1 < ACTION INITIALE :
< =0 : EFFACER L'ECRAN 512*512, ET REINI-
< TIALISER LES REGISTRES,
< #0 : NE RIEN FAIRE...
A4:: VAL A3+1 < TRANSLATION SUR X, SI (A0)<0,
A5:: VAL A4+1 < TRANSLATION SUR Y, SI (A0)<0.
AD:: VAL '0D < MASQUE DES NIVEAUX.
<
<
< C O N V E R S I O N I M A G E 5 1 2
< --> I M A G E 2 5 6 :
<
<
< FONCTION :
< CE MODULE ASSURE LA CONVERSION
< D'UNE IMAGE 256 EN UNE IMAGE 512
< SUIVANT LE MODE : ON PREND DANS L'IMAGE
< 512*512 UNE FENETRE 256*256, ET LES POINTS
< SONT ASSOCIES 1 A 1 ; LE NIVEAU (0,255)
< EST D'ABORD MASQUE PAR 'A3', PUIS DECALE
< A DROITE PAR 'A4'...
<
<
< ARGUMENT :
A11:: VAL '11 < TRANSLATION SUR OX,
A12:: VAL A11+1 < TRANSLATION SUR OY.
A13:: VAL A12+1 < MASQUE DES NIVEAUX DANS (0,255) LORSQUE
< (A0)#0,
A14:: VAL A13+1 < DECALAGE A DROITE DES NIVEAUX APRES LE
< MASQUAGE LORSQUE (A0)#0.
<
<
XXXIMA: VAL 1
EOT #SIP IMAGE 512#
YYYIMA:: VAL YYYIM1 < 'STORP' FONCTIONNERA PAR ENVOI SEQUEN-
< TIEL DU NIVEAU, DE 'X', DE 'Y' ET ENFIN
< DE L'ORDRE DE TRACE RASTER...
<
<
< L O C A L :
<
<
LOCAL
FLOC: EQU $
<
< CONSTANTES DIVERSES :
<
IPREM: WORD K-I < INDICATEUR DE PREMIER PASSAGE.
IMODE: WORD 0 < SENS DE LA CONVERSION :
< =0 : 256 --> 512,
< #0 : 512 --> 256.
FINFIN: FLOAT 1000000 < POUR FAIRE UN OVER-SCREEN.
ADECA2: WORD 0 < ARGUMENT 'A2' : AMPLITUDE DE DECALAGE
< DES NIVEAUX CALCULES PAR 'PNIVO'.
XWOR%3: VAL NIVMAX+I < NOMBRE DE NIVEAUX EN 256*256.
XWOR%1: VAL NIV256/XWOR%3=K < DECALAGE POUR PASSER D'UN NIVEAU EN
< 256*256 A UN NIVEAU EN 512*512.
XWOR%2: VAL XXXMOY+XXXMOY=K < POUR TENIR COMPTE DU FAIT QUE LE NIVEAU
< ARGUMENT 256*256 EST MULTIPLIE PAR 4.
XWOR%4: VAL XWOR%1-XWOR%2
FNIVO1: FLOAT <BIT>XWOR%4<K<K < POUR DECALER UN NOMBRE FLOTTANT A
< GAUCHE DE 'XWOR%4' POSITIONS...
FWORK4: FLOAT 0 < VARIABLE DE MANOEUVRE...
TRANPX: WORD 0 < 'A4'/'A11',
TRANPY: WORD 0 < 'A5'/'A12'.
NIMASK: WORD 0 < MASQUE DES NIVEAUX ('AD').
AMASKN: WORD 0 < MASQUE 'A13',
ADECA: WORD 0 < DECALAGE 'A14'.
AXMAX: WORD XMAX < COORDONNEE 'X' MAXIMALE,
AYMAX: WORD YMAX < POUR INVERSER LES AXES 'Y' BASSE
< ET MOYENNE DEFINITION ET COORDONNEES
< 'Y' MAXIMALE.
NIV00: FLOAT 0 < NIVEAU(X,Y),
NIV10: FLOAT 0 < NIVEAU(X+1,Y),
NIV01: FLOAT 0 < NIVEAU(X,Y+1),
NIV11: FLOAT 0 < NIVEAU(X+1,Y+1).
<
< RELAIS DIVERS :
<
APNIVO: WORD PNIVO < CALCUL D'UN NIVEAU 512...
ASTORQ: WORD STORQ < 'STORP' AVEC TEST PREALABLE DES NIVEAUX
< NULS.
ALOADQ: WORD LOADQ < 'LOADP' AVEC VALIDATION DE (X,Y).
AADRAA: WORD ADRAA < SIMULATION DE 'ADR''A,A' POUR DES
< NOMBRES FLOTTANTS.
APTRXY: WORD PTRXY < SOUS-PROGRAMME DE TRANSLATION DE (X,Y).
XXXIMA: VAL 2
EOT #SIP IMAGE 512#
<
< ADRESSE DES REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
XXXIMA: VAL 4
EOT #SIP IMAGE 512#
<
<
< P R O G R A M M E :
<
<
PROG
XXXIMA: VAL 3
EOT #SIP IMAGE 512#
XXXIMA: VAL 5
EOT #SIP IMAGE 512#
PAGE
<
<
< C A L C U L D ' U N N I V E A U S U R ( 0 , 2 5 5 ) :
<
<
< ARGUMENT :
< (A,B)=NIVEAU DE GRIS DE (0,NIVMAX) MULTIPLIE PAR 4,
<
<
< RESULTAT :
< (A)=NIVEAU ENTIER CADRE ET DECALE COMME DESIRE...
<
<
PNIVO: EQU $
PSR X < SAUVEGARDES...
FMP FNIVO1 < CONVERSION (0,7) --> (0,255).
BSR AFIX < ET CONVERSION ENTIER...
AND NIMASK < ET MASQUAGE, AFIN D'ELIMINER, PAR EXEM-
< PLE DES BITS DE QUEUE, FACILITANT
< AINSI LA SUPERPOSITION D'IMAGES, TOUT
< EN UTILISANT L'INTERPOLATION...
LX ADECA2 < (X)=DECALAGE DEMANDE PAR 'A2' :
CPZR X < QUEL SENS ???
JE PNIVO1 < RIEN A FAIRE...
JG PNIVO2 < A GAUCHE...
NGR X,X
SLRS K,X < A DROITE SI NEGATIF...
JMP PNIVO1
PNIVO2: EQU $
SLLS K,X < A GAUCHE SI POSITIF...
PNIVO1: EQU $
PLR X < RESTAURATIONS...
RSR
PAGE
<
<
< S T O R E P O I N T :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES DE POINT,
< (A)=NIVEAU DU POINT.
<
<
STORQ: EQU $
CPZR X
JL STORQ2 < (X)<0...
XR A,X
CP AXMAX
XR A,X
JG STORQ2 < (X)>'XMAX'...
CPZR Y
JL STORQ2 < (Y)<0...
XR A,Y
CP AYMAX
XR A,Y
JG STORQ2 < (Y)>'YMAX'...
JAE STORQ2 < NON, ET LE NIVEAU COURANT EST NUL, ON
< SORT SANS TRACER...
BSR ASTORP < TRACE DU POINT (X,Y) AVEC LE NIVEAU (A).
STORQ2: EQU $
RSR
PAGE
<
<
< L O A D P O I N T :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES DU POINT.
<
<
< RESULTATS :
< (A,B)=NIVEAU FLOTTANT DE CE POINT.
<
<
LOADQ: EQU $
LR X,A
JAL LOADQ1 < (X)<0...
CP AXMAX
JG LOADQ1 < (X)>'XMAX'...
LR Y,A
JAL LOADQ1 < (Y)<0...
CP AYMAX
JG LOADQ1 < (Y)>'YMAX'...
BSR ALOADP < (A)=NIVEAU D'UN POINT DANS L'ECRAN,
LOADQ2: EQU $
BSR AFLT < ET ON LE FLOTTE...
RSR
LOADQ1: EQU $
LAI XXNOIR < CAS DES POINTS HORS-ECRAN, ON LES REND
< NOIR...
JMP LOADQ2
PAGE
<
<
< S I M U L A T I O N D E A D R A ,A :
<
<
< FONCTION :
< CE MODULE DOUBLE LE NOMBRE
< FLOTTANT ARGUMENT (A,B).
<
<
ADRAA: EQU $
FST FWORK4
FAD FWORK4
RSR
PAGE
<
<
< T R A N S L A T I O N D E ( X , Y ) :
<
<
< ARGUMENTS :
< (X,Y)=COORDONNEES.
<
<
< RESULTATS :
< (X,Y)=COORDONNEES TRANSLATEES DE (TRANPX,TRANPY).
<
<
PTRXY: EQU $
XR A,X
AD TRANPX < TRANSLATION DE 'X',
XR A,X
XR A,Y
AD TRANPY < TRANSLATION DE 'Y'.
XR A,Y
RSR
PAGE
<
<
< C O M P O S A N T E E N ' U ' :
<
<
SPU: EQU $
CPZ IPREM < EST-CE LE PREMIER PASSAGE ???
JGE SPU1 < NON...
<
< PREMIER PASSAGE : ENTREE DES ARGUMENTS :
<
IC IPREM < MEMORISATION DE CETTE ENTREE...
<
< CHOIX DU SENS :
<
LXI A20
BSR ASPCT
BSR AROND
STA IMODE < IMODE=0 : 256 --> 512,
< #0 : 512 --> 256.
JAE SPU20 < VERS LE 256 --> 512...
<
<
< 5 1 2 --> 2 5 6 :
<
<
LXI A11
BSR ASPCT
BSR AROND
STA TRANPX < TRANSLATION SUR OX,
LXI A12
BSR ASPCT
BSR AROND
STA TRANPY < TRANSLATION SUR OY.
LXI A13
BSR ASPCT
BSR AROND
STA AMASKN < MASQUE DES NIVEAUX (0,255),
LXI A14
BSR ASPCT
BSR AROND
STA ADECA < DECALAGE A DROITE DES NIVEAUX (0,255).
<
< POSITIONNEMENT SUR LE POINT PRINCIPAL :
<
SPU10: EQU $
LX XR
LY YR
ADR X,X
ADR Y,Y
LA AYMAX
SBR A,Y < INVERSION DES AXES OY...
NGR Y,Y < ON SE PLACE AU POINT :
< (X,Y)=(2*XR,2*YR)...
<
< CONVERSION 1 POUR 1 :
<
LR X,A
XWOR%1: VAL XMAX+I/NMOTL/NBITMO
SLRS XWOR%1=K < REDUCTION DE 'X',
LR A,X
LR Y,A
XWOR%1: VAL YMAX+I/NLIG
SLRS XWOR%1=K < REDUCTION DE 'Y',
LR A,Y
BSR APTRXY < TRANSLATION DE (X,Y),
BSR ALOADQ < (A,B)=NIVEAU(X,Y) FLOTTANT,
BSR AFIX < (A)=NIVEAU(X,Y),
AND AMASKN < QUE L'ON MASQUE,
PSR X
LX ADECA
SLRS K,X < QUE L'ON DECALE A GAUCHE,
PLR X
ANDI NIVMAX < ET ENFIN QUE L'ON CALCULE MODULO...
<
< TRACE DU RESIDENT :
<
BSR ASPRPR < (XR,YR) <-- (A)...
JMP SPU3 < VERS LA SORTIE...
<
<
< 2 5 6 --> 5 1 2 :
<
<
SPU20: EQU $
LXI A4
BSR ASPCT
BSR AROND
STA TRANPX < A PRIORI, QUELQUE SOIT (A0)...
LXI A5
BSR ASPCT
BSR AROND
STA TRANPY < A PRIORI, QUELQUE SOIT (A0)...
LAI PAGER
BSR AGPCDA < POSITIONNEMENT SUR LA PAGE DES REGISTRES
< DE LA 'CDAJ'...
<
< DEFINITION DU TRACE :
<
LXI AD
BSR ASPCT
BSR AROND
STA NIMASK < ENTREE DU MASQUE DES NIVEAUX.
LXI A3
BSR ASPCT
BSR AROND
JANE SPU4 < (A3)#0 : ON N'EFFACE PAS...
<
< (A3)=0 : EFFACEMENT ET REINITIALISATION :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
SPU4: EQU $
<
< SELECTION DES PLANS ET DECALAGE :
<
LXI A1
BSR ASPCT
BSR AROND
EORI MOCD < ON INVERSE LES CONVENTIONS DU SOFT
< POUR ETRE COMPATIBLE HARD...
STA MCDAJ < PREPARATION DE LA LISTE DE SELECTION
< DES PLANS MEMOIRE,
LA ARPLAN < (A)=ADRESSE DU REGSITRE 'RPLAN',
BSR APWCDA < SELECTION DES PLANS DEMANDES...
LXI A2
BSR ASPCT
BSR AROND
STA ADECA2 < DECALAGE SUR CHAQUE NIVEAU...
<
< CHOIX DU SENS DE LA CONVERSION :
<
SPU1: EQU $
CPZ IMODE < QUEL EST LE SENS ???
JNE SPU10 < 512 --> 256...
<
< CAS DU 256 --> 512 : POSITION-
< NEMENT SUR LE POINT PRINCIPAL :
<
LX XR
LY YR
ADR X,X < ON SE PLACE EN (XR,YR)
ADR Y,Y < EN DOUBLANT LA DEFINITION...
LA AYMAX
SBR A,Y
NGR Y,Y < LES AXES 'Y' BASSE ET MOYENNE DEFINITION
< ETANT INVERSES...
<
< UN POINT POUR UN POINT :
<
SPU5: EQU $
LR X,A
XWOR%1: VAL XMAX+I/NMOTL/NBITMO
SLRS XWOR%1=K < REDUCTION DE 'X',
LR A,X
LR Y,A
XWOR%1: VAL YMAX+I/NLIG
SLRS XWOR%1=K < REDUCTION DE 'Y',
LR A,Y
BSR APTRXY < TRANSLATION DE (X,Y)...
BSR ASPGPR < (A)=NIVEAU(XR,YR),
BSR AFLT < QUE L'ON FLOTTE...
BSR AADRAA < ON LE
BSR AADRAA < MULTIPLIE PAR 4...
BSR APNIVO < ON LE CALIBRE,
BSR ASTORQ < ET ON MARQUE (X,Y)...
<
< ET SORTIE :
<
SPU3: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' V ' :
<
<
SPV: EQU $
FLD FINFIN < POUR FAIRE UN OVERSCREEN...
RSR
<
<
< C O M P O S A N T E E N ' W ' :
<
<
SPW: EQU $
FLD F0
RSR
:F
:F
< <<'SIO5 256<-->512'
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.