Pl2 CORRIG 3.DOC/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
No edit summary
 
mNo edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
{{Languages|Pl2 CORRIG 3.DOC}}
 
<pre>
 
<pre>
   
Line 12: Line 13:
 
1) Exercice nr°1:
 
1) Exercice nr°1:
 
--------------
 
--------------
Voilà le listing du corrig‚.
+
Voilà le listing du corrigé.
Je pense que cet exercice ne vous a pas pos‚ beaucoup de problèmes ,
+
Je pense que cet exercice ne vous a pas posé beaucoup de problèmes ,
regardez attentivement ce listing, il ne comporte aucune difficult‚.
+
regardez attentivement ce listing, il ne comporte aucune difficulté.
 
 
   
Line 30: Line 31:
 
;du tableau interne
 
;du tableau interne
   
;On d‚pose les adresses des tableaux du VDI dans le tableau interne
+
;On dépose les adresses des tableaux du VDI dans le tableau interne
   
 
move.l #CONTROL,ticontrol(a0)
 
move.l #CONTROL,ticontrol(a0)
Line 52: Line 53:
   
 
move #31,d0 ;31 dans d0
 
move #31,d0 ;31 dans d0
adda.l #10,a6 ;incr‚mente a6 de 10 unit‚s:
+
adda.l #10,a6 ;incrémente a6 de 10 unités:
 
;a6 pointe donc sur intin+10
 
;a6 pointe donc sur intin+10
   
BOUCLE move (a5)+,(a6)+ ;on d‚pose les donn‚es dans
+
BOUCLE move (a5)+,(a6)+ ;on dépose les données dans
;le tableau INTIN point‚ par
+
;le tableau INTIN pointé par
 
;a6
 
;a6
 
dbf d0,BOUCLE ;on boucle 32 fois pour les
 
dbf d0,BOUCLE ;on boucle 32 fois pour les
;32 donn‚es (16 mots pour le
+
;32 données (16 mots pour le
 
;masque et 16 mots pour le
 
;masque et 16 mots pour le
 
;premier plan)
 
;premier plan)
Line 81: Line 82:
   
 
 
DONNEES DC.W %0000001110000000 ;les 16 donn‚es (MOTS)
+
DONNEES DC.W %0000001110000000 ;les 16 données (MOTS)
 
DC.W %0000011111000000 ;du MASQUE
 
DC.W %0000011111000000 ;du MASQUE
 
DC.W %0000111111100000
 
DC.W %0000111111100000
Line 98: Line 99:
 
DC.W %0000001110000000
 
DC.W %0000001110000000
   
DC.W %0000000000000000 ;les 16 donn‚es (MOTS)
+
DC.W %0000000000000000 ;les 16 données (MOTS)
 
DC.W %0000001110000000 ;du PREMIER PLAN
 
DC.W %0000001110000000 ;du PREMIER PLAN
 
DC.W %0000011111000000
 
DC.W %0000011111000000
Line 125: Line 126:
 
2) Exercice nr°2:
 
2) Exercice nr°2:
 
--------------
 
--------------
Là encore, aucune difficult‚ majeure...
+
Là encore, aucune difficulté majeure...
Il fallait juste faire attention à bien utiliser des coordonn‚es
+
Il fallait juste faire attention à bien utiliser des coordonnées
graphiques qui correspondent à la r‚solution utilis‚e.
+
graphiques qui correspondent à la résolution utilisée.
   
 
(OX)=640 de 0 à 339
 
(OX)=640 de 0 à 339
(OY)=200 de 0 à 199 (MOYENNE r‚solution)
+
(OY)=200 de 0 à 199 (MOYENNE résolution)
   
   
Line 143: Line 144:
 
DC.W $A000 ;on demande l'adresse du T.I. et
 
DC.W $A000 ;on demande l'adresse du T.I. et
 
movea.l a0,a5 ;on la pose dans a5 car a0 risque
 
movea.l a0,a5 ;on la pose dans a5 car a0 risque
;d'ètre modifi‚ par nos MACROS...
+
;d'ètre modifié par nos MACROS...
   
; On d‚pose les adresses des tableaux du VDI
+
; On dépose les adresses des tableaux du VDI
   
 
move.l #CONTROL,ticontrol(a0)
 
move.l #CONTROL,ticontrol(a0)
Line 157: Line 158:
 
DC.W $A00A ;HIDE MOUSE
 
DC.W $A00A ;HIDE MOUSE
 
CCONOUT #27 ;ESC
 
CCONOUT #27 ;ESC
CCONOUT #'E' ;+ 'E' = efface l'‚cran
+
CCONOUT #'E' ;+ 'E' = efface l'écran
   
 
move #1,_fg_bp_1(a5)
 
move #1,_fg_bp_1(a5)
Line 164: Line 165:
 
move #0,_wrt_mode(a5) ;Write mode AND
 
move #0,_wrt_mode(a5) ;Write mode AND
   
move #1,_patmsk(a5) ;1+1=2 donn‚es pour le PAT
+
move #1,_patmsk(a5) ;1+1=2 données pour le PAT
   
 
move.l #LIGNE,_patptr(a5) ;en 'LIGNE' se trouve
 
move.l #LIGNE,_patptr(a5) ;en 'LIGNE' se trouve
Line 215: Line 216:
 
--------------
 
--------------
 
Voilà le listing du programme qui trace un rectangle avec un PAT
 
Voilà le listing du programme qui trace un rectangle avec un PAT
red‚fini après avoir charg‚ le programme de quadrillage pr‚c‚dent.
+
redéfini après avoir chargé le programme de quadrillage précédent.
   
   
Line 235: Line 236:
 
DC.W $A000 ;On recherche l'adresse du T.I.
 
DC.W $A000 ;On recherche l'adresse du T.I.
 
movea.l a0,a5 ;On sauve cette adresse car elle
 
movea.l a0,a5 ;On sauve cette adresse car elle
;risque d'ètre effac‚e par une
+
;risque d'ètre effacée par une
 
;de nos MACRO si elle utilise ce
 
;de nos MACRO si elle utilise ce
 
;registre...
 
;registre...
Line 253: Line 254:
 
move #0,_wrt_mode(a5) ;Write mode AND
 
move #0,_wrt_mode(a5) ;Write mode AND
   
move #7,_patmsk(a5) ;7+1=8 donn‚es pour le PAT
+
move #7,_patmsk(a5) ;7+1=8 données pour le PAT
 
 
 
move.l #FILL,_patptr(a5) ;Le nouveau PAT est en
 
move.l #FILL,_patptr(a5) ;Le nouveau PAT est en
 
;'FILL'
 
;'FILL'
   
;les coordonn‚es du rectangle
+
;les coordonnées du rectangle
   
 
move #129,_x1(a5) ;_x1=129
 
move #129,_x1(a5) ;_x1=129
Line 280: Line 281:
 
DC.W %0000000000000000
 
DC.W %0000000000000000
   
CADRE DC.B 27,'E','Je vais tracer un carr‚ avec $A005 '
+
CADRE DC.B 27,'E','Je vais tracer un carré avec $A005 '
DC.B 'après avoir charg‚ CADRE.PRG ',0
+
DC.B 'après avoir chargé CADRE.PRG ',0
   
 
NUL DC.B 0 ;Pas d'environnement et de
 
NUL DC.B 0 ;Pas d'environnement et de
Line 302: Line 303:
   
 
Il fallait faire attention à bien utiliser UNDRAW SPRITE à chaque fois
 
Il fallait faire attention à bien utiliser UNDRAW SPRITE à chaque fois
pour pouvoir r‚afficher le SPRITE à d'autres coordonn‚es.
+
pour pouvoir réafficher le SPRITE à d'autres coordonnées.
 
Il fallait aussi fournir TOUS les paramètres dont les routines DRAW
 
Il fallait aussi fournir TOUS les paramètres dont les routines DRAW
SPRITE et UNDRAW SPRITE ont besoin pour obtenir un r‚sultat correct.
+
SPRITE et UNDRAW SPRITE ont besoin pour obtenir un résultat correct.
 
J'ai choisit ,pour la forme de mon SPRITE, un sigle ATARI et mes
 
J'ai choisit ,pour la forme de mon SPRITE, un sigle ATARI et mes
 
intitiales :L-P .(C'est pas très original, je le reconnais...)
 
intitiales :L-P .(C'est pas très original, je le reconnais...)
 
 
 
J'utilise aussi la macro instruction VSYNC pour synchroniser nos
 
J'utilise aussi la macro instruction VSYNC pour synchroniser nos
‚ditions graphiques:le programme en est fortement ralenti mais le
+
éditions graphiques:le programme en est fortement ralenti mais le
 
clignotement des affichages du SPRITE disparait...
 
clignotement des affichages du SPRITE disparait...
 
 
Line 322: Line 323:
   
 
DC.W $A000 ;adresse du T.I. dans a0 et
 
DC.W $A000 ;adresse du T.I. dans a0 et
movea.l a0,a5 ;dans a5 pour ‚viter de la
+
movea.l a0,a5 ;dans a5 pour éviter de la
 
;perdre si une MACRO utilise
 
;perdre si une MACRO utilise
 
;le registre a0...
 
;le registre a0...
Line 338: Line 339:
 
DC.W $A00A ;HIDE MOUSE
 
DC.W $A00A ;HIDE MOUSE
 
CCONOUT #27 ;ESC
 
CCONOUT #27 ;ESC
CCONOUT #'E' ;+'E' = effacer l'‚cran
+
CCONOUT #'E' ;+'E' = effacer l'écran
   
   
 
move #0,_wrt_mode(a5) ;Write mode AND
 
move #0,_wrt_mode(a5) ;Write mode AND
   
move.l #BLOC,a0 ;Adresse du bloc de d‚finition
+
move.l #BLOC,a0 ;Adresse du bloc de définition
 
;du SPRITE dans a0
 
;du SPRITE dans a0
 
move.l #SAUVE,a2 ;Adresse du Tampon de sauvegarde
 
move.l #SAUVE,a2 ;Adresse du Tampon de sauvegarde
 
;dans a2 (128 octets pour la moy-
 
;dans a2 (128 octets pour la moy-
;enne r‚solution)
+
;enne résolution)
   
; Le SPRITE va d'abord de la gauche vers la droite (coordonn‚e X dans d0
+
; Le SPRITE va d'abord de la gauche vers la droite (coordonnée X dans d0
et coordonn‚e Y dans d1)
+
et coordonnée Y dans d1)
   
 
move #10,X ;1 MOT=10 en 'X'
 
move #10,X ;1 MOT=10 en 'X'
Line 394: Line 395:
 
DATA
 
DATA
   
;Le bloc de d‚finition du SPRITE:
+
;Le bloc de définition du SPRITE:
   
 
BLOC DC.W 0 ;X du point chaud
 
BLOC DC.W 0 ;X du point chaud
Line 441: Line 442:
 
BSS
 
BSS
   
X DS.W 1 ;on r‚serve un MOT en 'X'
+
X DS.W 1 ;on réserve un MOT en 'X'
   
 
SAUVE DS.B 128 ;le TAMPON pour le SPRITE ( MOYENNE
 
SAUVE DS.B 128 ;le TAMPON pour le SPRITE ( MOYENNE
;r‚solution)
+
;résolution)
   
 
INCLUDE "TABLEAU.L" ;le tableau du VDI
 
INCLUDE "TABLEAU.L" ;le tableau du VDI
Line 454: Line 455:
 
5) Exercice nr°5:
 
5) Exercice nr°5:
 
--------------
 
--------------
Voilà le listing du programme qui affiche les points de diff‚rente
+
Voilà le listing du programme qui affiche les points de différente
couleur sur l'‚cran.
+
couleur sur l'écran.
   
   
Line 465: Line 466:
   
   
; Je teste d'obord si on est dans la bonne r‚solution:
+
; Je teste d'obord si on est dans la bonne résolution:
   
GETREZ ;on demande la R‚solution
+
GETREZ ;on demande la Résolution
tst d0 ;A-t-on r‚solution=0 (BASSE)
+
tst d0 ;A-t-on résolution=0 (BASSE)
 
beq OK ;Si Oui va en 'OK'
 
beq OK ;Si Oui va en 'OK'
 
PRINTLINE MOYENNE ;sinon message
 
PRINTLINE MOYENNE ;sinon message
Line 493: Line 494:
 
WAIT ;attente
 
WAIT ;attente
 
CCONOUT #27 ;ESC
 
CCONOUT #27 ;ESC
CCONOUT #'E' ;+'E' = effacer l'‚cran
+
CCONOUT #'E' ;+'E' = effacer l'écran
   
   
; Je d‚finit une MACRO INSTRUCTION nomm‚e POINT qui admet 3 paramètres
+
; Je définit une MACRO INSTRUCTION nommée POINT qui admet 3 paramètres
; et qui permet d'‚diter un point à l'‚cran gràce à la routine $A001
+
; et qui permet d'éditer un point à l'écran gràce à la routine $A001
   
 
POINT MACRO $\1,$\2,$\3 ;macro à 3 paramètres
 
POINT MACRO $\1,$\2,$\3 ;macro à 3 paramètres
   
move \1,ptsin ;\1=coordonn‚e X
+
move \1,ptsin ;\1=coordonnée X
move \2,ptsin+2 ;\2=coordonn‚e Y
+
move \2,ptsin+2 ;\2=coordonnée Y
 
move \3,intin ;\3=couleur
 
move \3,intin ;\3=couleur
 
DC.W $A001 ;PUT PIXEL
 
DC.W $A001 ;PUT PIXEL
Line 508: Line 509:
 
ENDM ;fin de la macro
 
ENDM ;fin de la macro
   
; Ici je vais afficher tous les points de l'‚cran et je leurs donne une
+
; Ici je vais afficher tous les points de l'écran et je leurs donne une
; couleur grƒce au nombre al‚atoire que me donne RANDOM dans d0.
+
; couleur grƒce au nombre aléatoire que me donne RANDOM dans d0.
 
; Pour ne pas obtenir un nombre trop grand avec RANDOM, je masque le
 
; Pour ne pas obtenir un nombre trop grand avec RANDOM, je masque le
 
; nombre de d0 avec le nombre maximum de chiffres dont j'ai besoin.
 
; nombre de d0 avec le nombre maximum de chiffres dont j'ai besoin.
Line 524: Line 525:
   
 
LOOP move #199,d6 ;199 dans d6
 
LOOP move #199,d6 ;199 dans d6
BOUCLE POINT d5,d6,d0 ;POINT aux coordonn‚es
+
BOUCLE POINT d5,d6,d0 ;POINT aux coordonnées
 
;(d5,d6) et avec la couleur
 
;(d5,d6) et avec la couleur
 
;contenue dans d0
 
;contenue dans d0
ENCORE RANDOM ;Nombre al‚atoire en retour
+
ENCORE RANDOM ;Nombre aléatoire en retour
 
;dans d0
 
;dans d0
 
and.l #15,d0 ;on masque les 4 bits de plus
 
and.l #15,d0 ;on masque les 4 bits de plus
Line 538: Line 539:
   
 
; Maintenant on fait varier la valeur de la palette des couleurs:
 
; Maintenant on fait varier la valeur de la palette des couleurs:
; On a cr‚e un vecteur qui contient les adresses des palettes.
+
; On a crée un vecteur qui contient les adresses des palettes.
 
; (En 'VECTEUR')
 
; (En 'VECTEUR')
 
; On prend une de ces adresses et on change la palette (Je n'utilise pas
 
; On prend une de ces adresses et on change la palette (Je n'utilise pas
; la MACRO PALETTE que nous avons cr‚e car elle attend un LABEL comme pa-
+
; la MACRO PALETTE que nous avons crée car elle attend un LABEL comme pa-
 
; ramètre.) puis on recommence avec l'adresse de la palette suivante...
 
; ramètre.) puis on recommence avec l'adresse de la palette suivante...
 
; J'utilise aussi INKEY pour tester si on enfonce une touche et si tel
 
; J'utilise aussi INKEY pour tester si on enfonce une touche et si tel
Line 549: Line 550:
 
lea VECTEUR,a6 ;adresse de 'VECTEUR' dans a6
 
lea VECTEUR,a6 ;adresse de 'VECTEUR' dans a6
   
CHANGE move.l (a6)+,-(sp) ;on pose le L-M point‚ par a6
+
CHANGE move.l (a6)+,-(sp) ;on pose le L-M pointé par a6
 
;(une adresse pour la palette)
 
;(une adresse pour la palette)
 
;dans -(SP)
 
;dans -(SP)
Line 557: Line 558:
 
INKEY ;je teste une touche au vol
 
INKEY ;je teste une touche au vol
 
tst d0 ;d0=0 ? (Si=0,pas de touche)
 
tst d0 ;d0=0 ? (Si=0,pas de touche)
bne RETOUR ;Si NON (1 touche a ‚t‚ en-
+
bne RETOUR ;Si NON (1 touche a été en-
;fonc‚e) on va en 'RETOUR'
+
;foncée) on va en 'RETOUR'
 
dbf d6,CHANGE ;Sinon boucle en 'CHANGE'
 
dbf d6,CHANGE ;Sinon boucle en 'CHANGE'
 
jmp ICI ;puis va en 'ICI'
 
jmp ICI ;puis va en 'ICI'
Line 564: Line 565:
   
 
RETOUR CCONOUT #27 ;ESC
 
RETOUR CCONOUT #27 ;ESC
CCONOUT #'E' ;+'E' = effacer l'‚cran
+
CCONOUT #'E' ;+'E' = effacer l'écran
   
 
PALETTE ANCIEN ;On remet l'ancienne PALETTE
 
PALETTE ANCIEN ;On remet l'ancienne PALETTE
Line 574: Line 575:
 
DATA
 
DATA
   
; Les donn‚es d‚finissant les palettes qu'on affiche sucessivement pour
+
; Les données définissant les palettes qu'on affiche sucessivement pour
 
; obtenir une rotation des couleurs.
 
; obtenir une rotation des couleurs.
 
; A chaque palette, on fait une rotation d'une couleur vers la droite...
 
; A chaque palette, on fait une rotation d'une couleur vers la droite...
; La couleur 0 ne change jamais pour ‚viter d'obtenir un clignotement du
+
; La couleur 0 ne change jamais pour éviter d'obtenir un clignotement du
; bord de l'‚cran (Couleur 0)
+
; bord de l'écran (Couleur 0)
   
 
NOUVEAU DC.W $000,$027,$037,$027,$017,$016,$006,$015
 
NOUVEAU DC.W $000,$027,$037,$027,$017,$016,$006,$015
Line 626: Line 627:
   
   
; Le vecteur qui pointe sur les adresses des diff‚rentes palettes
+
; Le vecteur qui pointe sur les adresses des différentes palettes
   
 
VECTEUR DC.L NOUVEAU,UN,DEUX,TROIS,QUATRE,CINQ,SIX,SEPT
 
VECTEUR DC.L NOUVEAU,UN,DEUX,TROIS,QUATRE,CINQ,SIX,SEPT
Line 638: Line 639:
   
   
MESSAGE DC.B 27,'E',174,' Image brouill‚e ',175,':avec la'
+
MESSAGE DC.B 27,'E',174,' Image brouillée ',175,':avec la'
   
 
DC.B ' fonction',13,10,'$A001 et RANDOM pour les'
 
DC.B ' fonction',13,10,'$A001 et RANDOM pour les'
Line 646: Line 647:
 
MOYENNE DC.B 27,'E','ATTENTION, Ce programme ne marche '
 
MOYENNE DC.B 27,'E','ATTENTION, Ce programme ne marche '
 
DC.B 'qu',39,'en BASSE RESOLUTION !',13,10,'Il faut '
 
DC.B 'qu',39,'en BASSE RESOLUTION !',13,10,'Il faut '
DC.B 'changer la r‚solution grace au BUREAU GEM...',7,0
+
DC.B 'changer la résolution grace au BUREAU GEM...',7,0
   
   
Line 659: Line 660:
 
6) Exercice nr°6:
 
6) Exercice nr°6:
 
--------------
 
--------------
Voilà le corrig‚ du programme qui affiche les losanges sans puis avec
+
Voilà le corrigé du programme qui affiche les losanges sans puis avec
 
le CLIPPING...
 
le CLIPPING...
   
Line 687: Line 688:
 
DC.W $A00A ;HIDE MOUSE
 
DC.W $A00A ;HIDE MOUSE
 
CCONOUT #27 ;ESC
 
CCONOUT #27 ;ESC
CCONOUT #'E' ;+'E' = effacer l'‚cran
+
CCONOUT #'E' ;+'E' = effacer l'écran
   
   
Line 696: Line 697:
   
   
move #1,_patmsk(a5) ;2 donn‚es pour le PAT
+
move #1,_patmsk(a5) ;2 données pour le PAT
 
move.l #PAT,_patptr(a5) ;en 'PAT'
 
move.l #PAT,_patptr(a5) ;en 'PAT'
 
 
Line 709: Line 710:
 
WAIT ;attente
 
WAIT ;attente
 
CCONOUT #27 ;ESC
 
CCONOUT #27 ;ESC
CCONOUT #'E' ;+'E' = effacer l'‚cran
+
CCONOUT #'E' ;+'E' = effacer l'écran
   
 
move #1,_clip(a5) ;AVEC CLIPPING
 
move #1,_clip(a5) ;AVEC CLIPPING
   
   
; Les coordonn‚es du CADRE DU CLIPPING sont: (0,0)-(320,190)
+
; Les coordonnées du CADRE DU CLIPPING sont: (0,0)-(320,190)
   
 
move #0,_xmn_clip(a5)
 
move #0,_xmn_clip(a5)
Line 729: Line 730:
 
; Ici on trace le losange avec FILLED POLYGONE:
 
; Ici on trace le losange avec FILLED POLYGONE:
   
; Coordonn‚es du POLYGONE dans PTSIN: (320,10)-(570,100)-(320,190)-
+
; Coordonnées du POLYGONE dans PTSIN: (320,10)-(570,100)-(320,190)-
 
; (70,100) et on boucle avec (320,10)
 
; (70,100) et on boucle avec (320,10)
   
Line 746: Line 747:
   
 
; Ici on apelle FILLED POLYGONE pour chaque ligne HORIZONTALE du losange:
 
; Ici on apelle FILLED POLYGONE pour chaque ligne HORIZONTALE du losange:
de Y=10 à Y=190 (car notre losange n'est d‚finit qu'entre ces lignes)
+
de Y=10 à Y=190 (car notre losange n'est définit qu'entre ces lignes)
   
 
move #9,d6 ;9 dans d6
 
move #9,d6 ;9 dans d6
Line 781: Line 782:
 
Voilà pour la correction des exercices sur les LineAs...
 
Voilà pour la correction des exercices sur les LineAs...
 
 
Les listings de ces 6 programmes ainsi que les programmes ex‚cutables
+
Les listings de ces 6 programmes ainsi que les programmes exécutables
 
se trouvent bien entendu sur cette disquette dans les fichiers:
 
se trouvent bien entendu sur cette disquette dans les fichiers:
   
Line 803: Line 804:
 
</pre>
 
</pre>
 
Back to [[ASM_Tutorial]]
 
Back to [[ASM_Tutorial]]
  +
[[Category: ASSEMBLEUR 68000 sur ATARI ST Part 2]]

Latest revision as of 21:07, 17 December 2023



                         -------------------------
                         CORRECTIONS des EXERCICES
          
                              sur les LineAs

                         -------------------------


1) Exercice nr°1:
   --------------
   Voilà le listing du corrigé.
   Je pense que cet exercice ne vous a pas posé beaucoup de problèmes ,
   regardez attentivement ce listing, il ne comporte aucune difficulté.
   

               TEXT

               INCLUDE       "LINEQU.L"      ;les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;Les macros

               SETBLOCK                      ;Initialisation

;On recherche l'adresse du Tableau interne pour les LineAs

               DC.W          $A000           ;retour dans a0 de l'adresse
                                             ;du tableau interne

;On dépose les adresses des tableaux du VDI dans le tableau interne

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)


               PRINTLINE     SOURIS     ;texte
               WAIT                     ;attente

               lea           INTIN,a6   ;adresse de INTIN dans a6

               move          #0,6(a6)   ;0 dans intin+6 (couleur du
                                        ;masque)
               move          #1,8(a6)   ;1 dans intin+8 (couleur du
                                        ;premier plan)

               lea           DONNEES,a5 ;adresse de 'DONNEES' dans a5

               move          #31,d0     ;31 dans d0     
               adda.l        #10,a6     ;incrémente a6 de 10 unités:
                                        ;a6 pointe donc sur intin+10

BOUCLE         move          (a5)+,(a6)+ ;on dépose les données dans
                                         ;le tableau INTIN pointé par
                                         ;a6
               dbf           d0,BOUCLE   ;on boucle 32 fois pour les
                                         ;32 données (16 mots pour le
                                         ;masque et 16 mots pour le 
                                         ;premier plan)

               DC.W          $A00B       ;TRANSFORM MOUSE 

               move          #0,intin    ;compteur=0
               DC.W          $A009       ;SHOW MOUSE         

               PRINTLINE     MESSAGE    ;texte
               WAIT                     ;attente 
               TERM                     ;fin


               DATA

SOURIS         DC.B          27,'E','Je change la forme du curseur de la'
               DC.B          ' souris ...',0

MESSAGE        DC.B          27,'E','Bougez la SOURIS SVP ...',7,0

 
DONNEES        DC.W          %0000001110000000    ;les 16 données (MOTS)
               DC.W          %0000011111000000    ;du MASQUE
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000111111100000
               DC.W          %0000011111000000
               DC.W          %0000001110000000
               DC.W          %0000011111000000
               DC.W          %0000111111100000
               DC.W          %0000011111000000
               DC.W          %0000001110000000

               DC.W          %0000000000000000    ;les 16 données (MOTS)
               DC.W          %0000001110000000    ;du PREMIER PLAN
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000011111000000
               DC.W          %0000001110000000
               DC.W          %0000000000000000
               DC.W          %0000001110000000
               DC.W          %0000011111000000
               DC.W          %0000001110000000
               DC.W          %0000000000000000


               BSS

               INCLUDE       "TABLEAU.L"          ;le tableau du VDI               

               END


2) Exercice nr°2:
   --------------
    Là encore, aucune difficulté majeure...
    Il fallait juste faire attention à bien utiliser des coordonnées
    graphiques qui correspondent à la résolution utilisée.

    (OX)=640 de 0 à 339
    (OY)=200 de 0 à 199  (MOYENNE résolution)


               TEXT

               INCLUDE       "LINEQU.L"      ;les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;Les macros

               SETBLOCK                      ;initialisation

               DC.W          $A000   ;on demande l'adresse du T.I. et
               movea.l       a0,a5   ;on la pose dans a5 car a0 risque         
                                     ;d'ètre modifié par nos MACROS...

; On dépose les adresses des tableaux du VDI 

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)

               PRINTLINE     CADRE      ;texte
               WAIT                     ;attente
               DC.W          $A00A      ;HIDE MOUSE
               CCONOUT       #27        ;ESC
               CCONOUT       #'E'       ;+ 'E' = efface l'écran

               move        #1,_fg_bp_1(a5) 
               move        #1,_fg_bp_2(a5)  ;couleur=%11=3

               move        #0,_wrt_mode(a5) ;Write mode AND

               move        #1,_patmsk(a5)   ;1+1=2 données pour le PAT

               move.l      #LIGNE,_patptr(a5)  ;en 'LIGNE' se trouve
                                               ;le nouveau PAT

               move        #%1111111111111111,_ln_mask(a5) ;ligne PLEINE

               move          #0,d5      ;0 dans d5
               move          #22,d6     ;22 dans d6     

BOUCLE         move          #0,_x1(a5)      ;_x1=0
               move          d5,_y1(a5)      ;_y1=d5
               move          #630,_x2(a5)    ;_x2=630
               move          d5,_y1(a5)      ;_y2=d5
               add           #9,d5           ;on ajoute 9 à d5
               DC.W          $A004           ;et on trace la H-LINE
               dbf           d6,BOUCLE       ;on recommence 23 fois

               move          #0,d5      ;0 dans d5
               move          #42,d6     ;42 dans d6         


LOOP           move          d5,_x1(a5)      ;_x1=d5
               move          #0,_y1(a5)      ;_y1=0
               move          d5,_x2(a5)      ;_x2=d5
               move          #197,_y2(a5)    ;_y2=197     
               add           #15,d5          ;on ajoute 15 à d5     
               DC.W          $A003           ;et on trace la LINE
               dbf           d6,LOOP         ;on recommence 43 fois

               WAIT                     ;attente
               TERM                     ;fin

               DATA

LIGNE          DC.W          %1111111111111111    ;le PAT (Nombre PAIRE
               DC.W          %1111111111111111    ;de MOTS)

CADRE          DC.B          27,'E','Je vais tracer un quadrillage ...'
               DC.B          13,10,'Fonctions LINE et H-LINE :',0

               BSS

               INCLUDE       "TABLEAU.L"          ;le Tableau du VDI

               END


3) Exercice nr°3:
   --------------
   Voilà le listing du programme qui trace un rectangle avec un PAT 
   redéfini après avoir chargé le programme de quadrillage précédent.


               TEXT

               INCLUDE       "LINEQU.L"      ;les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;Les MACROS

               SETBLOCK                      ;initialisation

               PRINTLINE     CADRE           ;texte
               WAIT                          ;attente

               PEXEC         NUL,ZERO,PRG,#0  ;on charge le programme dont
                                              ;le nom est en 'PRG' en mode
                                              ;0 et sans paramètres.

               DC.W          $A000        ;On recherche l'adresse du T.I.     
               movea.l       a0,a5        ;On sauve cette adresse car elle
                                          ;risque d'ètre effacée par une
                                          ;de nos MACRO si elle utilise ce
                                          ;registre...

; On pose les adresses des tableaux du VDI dans le T.I.

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)


               move          #1,_fg_bp_1(a5) 
               move          #0,_fg_bp_2(a5)   ;Couleur=%01=1

               move          #0,_wrt_mode(a5)  ;Write mode AND

               move          #7,_patmsk(a5)    ;7+1=8 données pour le PAT
   
               move.l        #FILL,_patptr(a5) ;Le nouveau PAT est en 
                                               ;'FILL' 

               ;les coordonnées du rectangle

               move          #129,_x1(a5)      ;_x1=129    
               move          #24,_y1(a5)       ;_y1=24   
               move          #496,_x2(a5)      ;_x2=496
               move          #183,_y2(a5)      ;_y2=183

               DC.W          $A005             ;FILLED RECTANGLE
               WAIT                            ;attente   
               TERM                            ;fin

               DATA

FILL           DC.W          %0111111111111110 ;le PAT (Nombre PAIRE de   
               DC.W          %0100000000000010 ;MOTS)   
               DC.W          %0101000000001010
               DC.W          %0101111111111010
               DC.W          %0101000000001010
               DC.W          %0100000000000010
               DC.W          %0111111111111110
               DC.W          %0000000000000000

CADRE          DC.B          27,'E','Je vais tracer un carré avec $A005 '
               DC.B          'après avoir chargé CADRE.PRG ',0

NUL            DC.B          0     ;Pas d'environnement et de
ZERO           DC.B          0     ;ligne de commande

PRG            DC.B          'A:\CADRE.PRG',0    ;le NOM du prg à charger


               BSS

               INCLUDE       "TABLEAU.L"     ;le Tableau du VDI

               END



4) Exercice nr° 4:
   ---------------
   Voilà le listing du programme qui affiche le SPRITE.

   Il fallait faire attention à bien utiliser UNDRAW SPRITE à chaque fois
   pour pouvoir réafficher le SPRITE à d'autres coordonnées.
   Il fallait aussi fournir TOUS les paramètres dont les routines DRAW
   SPRITE et UNDRAW SPRITE ont besoin pour obtenir un résultat correct.
   J'ai choisit ,pour la forme de mon SPRITE, un sigle ATARI et mes 
   intitiales :L-P .(C'est pas très original, je le reconnais...)
      
   J'utilise aussi la macro instruction VSYNC pour synchroniser nos
   éditions graphiques:le programme en est fortement ralenti mais le
   clignotement des affichages du SPRITE disparait...
   

               TEXT

               INCLUDE       "LINEQU.L"      ;Les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;les MACROS

               SETBLOCK                      ;initialisation

               DC.W          $A000           ;adresse du T.I. dans a0 et
               movea.l       a0,a5           ;dans a5 pour éviter de la
                                             ;perdre si une MACRO utilise
                                             ;le registre a0...     

; On pose les adresses des Tableaux du VDI dans le T.I.

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)

               PRINTLINE     PIX        ;texte
               WAIT                     ;attente
               DC.W          $A00A      ;HIDE MOUSE
               CCONOUT       #27        ;ESC
               CCONOUT       #'E'       ;+'E' = effacer l'écran


               move          #0,_wrt_mode(a5)     ;Write mode AND

               move.l        #BLOC,a0   ;Adresse du bloc de définition
                                        ;du SPRITE dans a0          
               move.l        #SAUVE,a2  ;Adresse du Tampon de sauvegarde
                                        ;dans a2 (128 octets pour la moy-
                                        ;enne résolution)

; Le SPRITE va d'abord de la gauche vers la droite (coordonnée X dans d0
  et coordonnée Y dans d1)

               move          #10,X      ;1 MOT=10 en 'X'

BBB            add           #1,X       ;On ajoute 1 en 'X'
               move          X,d0       ;On pose le MOT de 'X' dans d0
               move          #100,d1    ;On pose 100 dans d1
               move.l        #BLOC,a0   ;L'adresse du bloc dans a0
               cmpi          #620,d0    ;A-t-on d0=620 ?
               beq           DEUX       ;si OUI, va en 'DEUX'
               move.l        #SAUVE,a2  ;Sinon pose l'adresse du Tampon
                                        ;de sauvegarde du sprite dans a2
               DC.W          $A00C      ;et UNDRAW SPRITE
               move.l        #BLOC,a0   ;L'adresse du bloc dans a0
               move.l        #SAUVE,a2  ;L'adresse du tampon dans a2
               DC.W          $A00D      ;et DRAW SPRITE
               VSYNC                    ;On synchronise
               jmp           BBB        ;et on recommence en 'BBB'


; Puis le SPRITE revient de la droite vers la gauche.


DEUX           sub           #1,X       ;on retranche 1 en 'X' 
               move          X,d0       ;on pose le mot de 'X' dans d0
               move          #100,d1    ;on pose 100 dans d1
               move.l        #BLOC,a0   ;L'adresse du bloc dans a0
               cmpi          #10,d0     ;A-t-on d0=10 ?
               beq           FIN        ;Si OUI, alors va en 'FIN'
               move.l        #SAUVE,a2  ;Sinon adresse du tampon dans a2
               DC.W          $A00C      ;et UNDRAW SPRITE
               move.l        #BLOC,a0   ;L'adresse du bloc dans a0
               move.l        #SAUVE,a2  ;L'adresse du tampon dans a2
               DC.W          $A00D      ;et DRAW SPRITE
               VSYNC                    ;On synchronise
               jmp           DEUX       ;et on recommence en 'DEUX'


FIN            WAIT                     ;attente
               TERM                     ;fin


               DATA

;Le bloc de définition du SPRITE:

BLOC           DC.W          0     ;X du point chaud
               DC.W          0     ;Y du point chaud
               DC.W          0     ;Format VDI
               DC.W          0     ;Couleur du MASQUE
               DC.W          1     ;Couleur du premier plan

               DC.W          0                    ;pas de masque
               DC.W          %0000000000000000    ;1° ligne du 1° plan
               DC.W          0                    ;pas de masque
               DC.W          %0000110110110000    ;2° ligne du 1° plan
               DC.W          0                    ;pas de masque
               DC.W          %0000110110110000
               DC.W          0
               DC.W          %0000110110110000
               DC.W          0
               DC.W          %0001100110011000
               DC.W          0
               DC.W          %0011000110001100
               DC.W          0
               DC.W          %0011000110001100
               DC.W          0
               DC.W          %0110000110000110
               DC.W          0
               DC.W          %0110000110000110
               DC.W          0
               DC.W          %0000000000000000
               DC.W          0
               DC.W          %0011000001111100
               DC.W          0
               DC.W          %0011000001101100
               DC.W          0
               DC.W          %0011000001111000
               DC.W          0
               DC.W          %0011000001100000
               DC.W          0
               DC.W          %0011111001100000
               DC.W          0                    ;pas de MASQUE
               DC.W          %0000000000000000    ;16 ° ligne du 1° plan


PIX            DC.B          27,'E','Je vais faire bouger un SPRITE avec '
               DC.B          '$A00D',0

               BSS

X              DS.W          1     ;on réserve un MOT en 'X'

SAUVE          DS.B          128   ;le TAMPON pour le SPRITE ( MOYENNE
                                   ;résolution)

               INCLUDE       "TABLEAU.L"     ;le tableau du VDI

               END



5) Exercice nr°5:
   --------------
  Voilà le listing du programme qui affiche les points de différente
  couleur sur l'écran.


               TEXT

               INCLUDE       "LINEQU.L"      ;les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;les MACROS


; Je teste d'obord si on est dans la bonne résolution:

               GETREZ                        ;on demande la Résolution
               tst           d0              ;A-t-on résolution=0 (BASSE)
               beq           OK              ;Si Oui va en 'OK'
               PRINTLINE     MOYENNE         ;sinon message 
               WAIT                          ;attente
               TERM                          ;et fin


OK             SETBLOCK                      ;initialise

               DC.W          $A000           ;adresse du T.I. dans a0


; On pose les adresses des tableaux du VDI dans le T.I.

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)

               DC.W          $A00A           ;HIDE MOUSE

               PRINTLINE     MESSAGE         ;texte
               WAIT                          ;attente
               CCONOUT       #27             ;ESC
               CCONOUT       #'E'            ;+'E' = effacer l'écran


; Je définit une MACRO INSTRUCTION nommée POINT qui admet 3 paramètres
; et qui permet d'éditer un point à l'écran gràce à la routine $A001

POINT          MACRO         $\1,$\2,$\3     ;macro à 3 paramètres

               move          \1,ptsin        ;\1=coordonnée X
               move          \2,ptsin+2      ;\2=coordonnée Y
               move          \3,intin        ;\3=couleur
               DC.W          $A001           ;PUT PIXEL

               ENDM                          ;fin de la macro

; Ici je vais afficher tous les points de l'écran et je leurs donne une
; couleur grƒce au nombre aléatoire que me donne RANDOM dans d0.
; Pour ne pas obtenir un nombre trop grand avec RANDOM, je masque le
; nombre de d0 avec le nombre maximum de chiffres dont j'ai besoin.
; On obtient ainsi un nombre compris entre 0 et la valeur du masque 
; (Voir le chapitre sur le BIOS et l'XBIOS à la fonction RANDOM ...)
; Si d0=0 (couleur 0), je recommence le test avec RANDOM car la couleur
; du bord ne doit pas changer. 

 
               move          #319,d5         ;319 dans d5
               move          #1,d0           ;1 dans d0
               PALETTE       NOUVEAU         ;on change la PALETTE une
                                             ;première fois

LOOP           move          #199,d6         ;199 dans d6
BOUCLE         POINT         d5,d6,d0        ;POINT aux coordonnées 
                                             ;(d5,d6) et avec la couleur
                                             ;contenue dans d0
ENCORE         RANDOM                        ;Nombre aléatoire en retour 
                                             ;dans d0
               and.l         #15,d0          ;on masque les 4 bits de plus
                                             ;faible poids de d0 :15=%1111
               tst           d0              ;A-t-on d0=0 ?
               beq           ENCORE          ;Si oui, on recommence
               dbf           d6,BOUCLE       ;on boucle d6 fois en BOUCLE
               dbf           d5,LOOP         ;on boucle d5 fois en LOOP


; Maintenant on fait varier la valeur de la palette des couleurs:
; On a crée un vecteur qui contient les adresses des palettes. 
; (En 'VECTEUR')
; On prend une de ces adresses et on change la palette (Je n'utilise pas 
; la MACRO PALETTE que nous avons crée car elle attend un LABEL comme pa-
; ramètre.) puis on recommence avec l'adresse de la palette suivante...
; J'utilise aussi INKEY pour tester si on enfonce une touche et si tel
; est le cas, le programme se termine.

ICI            move          #14,d6          ;14 dans d6
               lea           VECTEUR,a6      ;adresse de 'VECTEUR' dans a6

CHANGE         move.l        (a6)+,-(sp)    ;on pose le L-M pointé par a6
                                            ;(une adresse pour la palette)
                                            ;dans -(SP)
               move          #6,-(sp)       ;Code 6 (PALETTE) 
               trap          #14            ;du BIOS 
               addq.l        #6,sp          ;et on repositionne SP 
               INKEY                        ;je teste une touche au vol 
               tst           d0             ;d0=0 ?  (Si=0,pas de touche) 
               bne           RETOUR         ;Si NON (1 touche a été en-
                                            ;foncée) on va en 'RETOUR'
               dbf           d6,CHANGE      ;Sinon boucle en 'CHANGE' 
               jmp           ICI            ;puis va en 'ICI' 
 

RETOUR         CCONOUT       #27            ;ESC 
               CCONOUT       #'E'           ;+'E' = effacer l'écran 

               PALETTE       ANCIEN         ;On remet l'ancienne PALETTE 

               TERM                         ;et on quitte le prg 



               DATA

; Les données définissant les palettes qu'on affiche sucessivement pour
; obtenir une rotation des couleurs.
; A chaque palette, on fait une rotation d'une couleur vers la droite...
; La couleur 0 ne change jamais pour éviter d'obtenir un clignotement du
; bord de l'écran (Couleur 0)

NOUVEAU        DC.W          $000,$027,$037,$027,$017,$016,$006,$015
               DC.W          $014,$036,$025,$005,$004,$014,$007,$003

UN             DC.W          $000,$007,$027,$037,$027,$017,$016,$006
               DC.W          $014,$015,$036,$025,$005,$004,$014,$007

DEUX           DC.W          $000,$003,$007,$027,$037,$027,$017,$016
               DC.W          $006,$015,$014,$036,$025,$005,$004,$014

TROIS          DC.W          $000,$007,$003,$007,$027,$037,$027,$017
               DC.W          $016,$006,$015,$014,$036,$025,$005,$004

QUATRE         DC.W          $000,$014,$007,$003,$007,$027,$037,$027
               DC.W          $017,$016,$006,$015,$014,$036,$025,$005

CINQ           DC.W          $000,$004,$014,$007,$003,$007,$027,$037
               DC.W          $027,$017,$016,$006,$015,$014,$036,$025

SIX            DC.W          $000,$005,$004,$014,$007,$003,$007,$027
               DC.W          $037,$027,$017,$016,$006,$015,$014,$036

SEPT           DC.W          $000,$025,$005,$004,$014,$007,$003,$014
               DC.W          $007,$027,$037,$027,$017,$016,$006,$015

HUIT           DC.W          $000,$036,$025,$005,$004,$014,$007,$003
               DC.W          $014,$007,$027,$037,$027,$017,$016,$006

NEUF           DC.W          $000,$015,$036,$025,$005,$004,$014,$007
               DC.W          $003,$014,$007,$027,$037,$027,$017,$016

DIX            DC.W          $000,$006,$015,$036,$025,$005,$004,$014
               DC.W          $07,$003,$014,$007,$027,$037,$027,$017

ONZE           DC.W          $000,$016,$006,$015,$036,$025,$005,$004
               DC.W          $014,$007,$003,$014,$007,$027,$037,$027

DOUZE          DC.W          $000,$017,$016,$006,$015,$036,$025,$005
               DC.W          $004,$014,$007,$003,$014,$007,$027,$037

TREIZE         DC.W          $000,$027,$017,$016,$006,$015,$036,$025
               DC.W          $005,$004,$014,$007,$003,$014,$007,$027

QUATORZE       DC.W          $000,$037,$027,$017,$016,$006,$015,$036
               DC.W          $025,$005,$004,$014,$007,$003,$014,$007


; Le vecteur qui pointe sur les adresses des différentes palettes

VECTEUR        DC.L          NOUVEAU,UN,DEUX,TROIS,QUATRE,CINQ,SIX,SEPT
               DC.L          HUIT,NEUF,DIX,ONZE,DOUZE,TREIZE,QUATORZE


; L'ancienne palette

ANCIEN         DC.W          $777,$500,$070,$000,$000,$000,$000,$000
               DC.W          $000,$000,$000,$000,$000,$000,$000,$000


MESSAGE        DC.B          27,'E',174,' Image brouillée ',175,':avec la'

               DC.B          ' fonction',13,10,'$A001 et RANDOM pour les'
               DC.B          'couleurs ...',13,10,13,10,'(Une touche pour'
               DC.B          'Quitter)',0

MOYENNE        DC.B        27,'E','ATTENTION, Ce programme ne marche '
               DC.B        'qu',39,'en BASSE RESOLUTION !',13,10,'Il faut '
               DC.B        'changer la résolution grace au BUREAU GEM...',7,0


               BSS

               INCLUDE       "TABLEAU.L"     ;le tableau du VDI

               END



6) Exercice nr°6:
   --------------
   Voilà le corrigé du programme qui affiche les losanges sans puis avec
   le CLIPPING...



               TEXT

               INCLUDE       "LINEQU.L"      ;Les EQUs
               INCLUDE       "INIT_TOS.L"    ;Setblock
               INCLUDE       "MACROS.L"      ;Les MACROS

               SETBLOCK                      ;initialisation

               DC.W          $A000           ;adresse du T.I. dans a0
               movea.l       a0,a5           ;je la sauve au cas o— ...

; On pose les adresses des tableaux du VDI dans le T.I.

               move.l        #CONTROL,ticontrol(a0)
               move.l        #INTIN,tiintin(a0)
               move.l        #PTSIN,tiptsin(a0)
               move.l        #INTOUT,tiintout(a0)
               move.l        #PTSOUT,tiptsout(a0)

               PRINTLINE     UN              ;texte
               WAIT                          ;attente
               DC.W          $A00A           ;HIDE MOUSE
               CCONOUT       #27             ;ESC
               CCONOUT       #'E'            ;+'E' = effacer l'écran


               move          #0,_fg_bp_1(a5)
               move          #1,_fg_bp_2(a5)      ;couleur %10=2

               move          #0,_wrt_mode(a5)     ;Write mode AND


               move          #1,_patmsk(a5)       ;2 données pour le PAT
               move.l        #PAT,_patptr(a5)     ;en 'PAT'
     
               move          #4,sptsin            ;4 sommets (losange)

               move          #0,_clip(a5)         ;PAS de CLIPPING
               jsr           TRACER               ;et on trace le losange

               
               WAIT                               ;attente
               PRINTLINE     DEUX                 ;texte
               WAIT                               ;attente
               CCONOUT       #27                  ;ESC
               CCONOUT       #'E'                 ;+'E' = effacer l'écran

               move          #1,_clip(a5)         ;AVEC CLIPPING


; Les coordonnées du CADRE DU CLIPPING sont: (0,0)-(320,190)

               move          #0,_xmn_clip(a5)     
               move          #0,_ymn_clip(a5)
               move          #320,_xmx_clip(a5)
               move          #190,_ymx_clip(a5)

               jsr           TRACER               ;et on trace le losange

               WAIT                               ;attente
               TERM                               ;fin


; Ici on trace le losange avec FILLED POLYGONE:

; Coordonnées du POLYGONE dans PTSIN: (320,10)-(570,100)-(320,190)-
; (70,100) et on boucle avec (320,10)

TRACER         move          #320,ptsin
               move          #10,ptsin+2
               move          #570,ptsin+4
               move          #100,ptsin+6
               move          #320,ptsin+8
               move          #190,ptsin+10
               move          #70,ptsin+12
               move          #100,ptsin+14
               move          #320,ptsin+16
               move          #10,ptsin+18



; Ici on apelle FILLED POLYGONE pour chaque ligne HORIZONTALE du losange:
  de Y=10 à Y=190 (car notre losange n'est définit qu'entre ces lignes)

               move          #9,d6      ;9 dans d6

BOUCLE         add           #1,d6      ;on ajoute 1 à d6     
               move          d6,_y1(a5) ;on pose d6 dans _y1
               DC.W          $A006      ;FILLED POLYGONE
               cmpi          #190,d6    ;A-t-on d6=190 ?
               bne           BOUCLE     ;Si NON alors recommence en BOUCLE

               rts                      ;RETOUR du SOUS-PROGRAMME


               DATA

PAT            DC.W          %1111111111111110    ;le PAT (Nombre PAIRE
               DC.W          %0000000000000000    ;de MOTS)


UN             DC.B          27,'E','Je trace un POLYGONE avec $A006 :',0
DEUX           DC.B          27,'E','Je trace le mème POLYGONE en utilisant '
               DC.B          'le CLIPPING',0

               BSS

               INCLUDE       "TABLEAU.L"     ;Le tableau du VDI

               END


                         
                              ------------------

 Voilà pour la correction des exercices sur les LineAs...
  
 Les listings de ces 6 programmes ainsi que les programmes exécutables
 se trouvent bien entendu sur cette disquette dans les fichiers:

      1)   TRANSMOU.L   &  TRANSMOU.PRG
      2)   CADRE   .L   &  CADRE   .PRG
      3)   RECTANGL.L   &  RECTANGL.PRG
      4)   SPRITE  .L   &  SPRITE  .PRG
      5)   POINT   .L   &  POINT   .PRG
      6)   POLYGONE.L   &  POLYGONE.PRG

 

  PIECHOCKI  Laurent
  8,Impasse Bellevue               Suite dans le fichier: INTERRUP.DOC
  57980  TENTELING                                        ------------  





Back to ASM_Tutorial