Pl2 CORRIG 3.DOC
Jump to navigation
Jump to search
-------------------------
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