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'