• Aucun résultat trouvé

Mat´eriel :

N/A
N/A
Protected

Academic year: 2022

Partager "Mat´eriel :"

Copied!
1
0
0

Texte intégral

(1)

Mat´eriel :

1. /RST est reli´e par une r´esistance de tirage au niveau haut : le processeur n’est doncpas, par d´efaut, en ´etat de r´einitialisation.

2. 16 lignes d’adresse A0-A15 donc 65536 octets.

3. 8 bits de donn´ees D0-D7 donc 1 octet.

4. A14 est connect´ee `a CE. Donc le bit 14 doit ˆetre `a 1 : y1xx xxxx xxxx xxxx. Si y=0, nous avons la plage 4000 `a 7FFF.

Si y=1, nous avons la plage C000-DFFF. Ce r´esultat est coh´erent avec l’organisation de la m´emoire propos´ee `a http:

//gameboy.mongenel.com/dmg/asmmemmap.html.

5. Aucune pr´ecaution n’est n´ecessaire, il suffit de connecter A0-Ax de la ROM aux broches du bus A0-Ax du processeur.

Cependant, afin d’´eviter tout conflit avec un acc`es aux p´eriph´eriques embarqu´es sur la console, il faudra par ailleurs invalider l’acc`es `a la ROM si la RAM interne est acc´ed´ee. Dans ce cas nous pla¸cons une porte NOT entre la ligne d’adresse 14 et le signal de s´election de la ROM : si la RAM est activ´ee par CE, alors la ROM ne l’est pas, et r´eciproquement.

6. nous devons adresser le convertisseur par une plage d’adresses occup´ee ni par la RAM, ni par la ROM, et cˆabler une com- binaison des bits de poids fort du bus d’adresses pour d´eclencher le signal d’activation du convertisseur (CS#) dans le cas ad´equat.

7. *(unsigned char*)adresse=valeur; avec adresseune valeur en dehors de la plage d’acc`es aux RAM, ROM et m´emoire vid´eo.

Assembleur :

1. `a l’int´erieur de la boucle : (9+4+5+7+7+6+6+6+10)=60 cycles d’horloge

2. 60 cycles `a 4 MHz (250 ns) durent 15µs. Au total pour BC donn´ees : BC×15 + (9 + 4 + 11)×0,25µs

3. Entre deux rafraˆıchissements : 1/60 Hz = 16667µs⇒(16667-24×0,25)/15=1110 octets. Nous sommes largement en-de¸ca de la taille de l’´ecran de 160×144 pixels=23040 bits=2880 octets.

4. Chaque instruction prend de nombreux cycles d’horloge sur Z80, contre 1 instruction par cycle d’horloge sur AVR8 sauf lorsqu’il faut vider le pipeline d’instructions.

5. d´ecr´ementer une valeur sur 16 bits n’affecte pas le drapeau Z (cf instruction DEC ss). Il faut donc tester les deux octets du mot de 16 bits form´e par BC, d’abord en copiant B dans l’accumulateur qui est l’argument implicite de OR, et ensuite faire un OU de A (qui contient B) avec C : ce OU logique n’est nul que si B et C sont tous deux nuls, c’est `a dire BC=0 qui indique la fin de la boucle. Le code propos´e est une version d´ecompos´ee de l’instruction LDIR qui fait toutes ces op´erations en 21 cycles d’horloge. Noter que le gain d’un facteur de pr`es de 5 en vitesse nous permet maintenant de mettre `a jour l’´ecran entre deux raffraˆıchissements.

La capture d’´ecran de droite propose une ex´ecution de ce code dans l’´emulateur de ZXSpectrum (aussi sur un Z80, mais avec une carte m´emoire un peu diff´erente de la console Gameboy) fuse-emulatoravec une compilation du programme au moyen des outils disponibles `a https://github.com/tstih/yx.git.

On y remarque l’affichage de pixels repr´esentant la s´equence bi- naire de 0 `a 19, et en insert le contenu de la m´emoire qui confirme que nous avons bien copi´e le contenu des m´emoires `a partir de la RAM vers la m´emoire vid´eo.

Figure 1: Ex´ecution de l’exemple de copie entre blocs m´emoire dans l’´emulateur ZXSpectrum. Le motif affich´e `a l’´ecran repr´esente le contenu de la m´emoire (surlign´e en bleu en insert).

Bresenham :

1. y= ∆y∆x·x+B avec ∆x=x1−x0et ∆y=y1−y0 2. f(x) =y−∆y∆x·x−B

3. f(x+ 1)−f(x) =∆y∆x siyne change pas (la valeur def(x+ 1)−f(x) d´etermine siy change ou non)

4. la fonction de coˆut ´evolue par pas de ∆y∆x qui n’est pas un entier. Nous exprimons donc l’algorithme sur ∆x·(f(x+ 1)−f(x)) qui ´evolue par pas de ∆y qui est quant `a lui un entier. `A chaque pas de x, nous incr´ementons la fonction de coˆut de ∆y, et si la fonction de coˆut change de signe, alors nous lui soustrayons ∆x. En pratique cela s’´ecrit

/ / h t t p : / / h u g i . s c e n e . o r g / o n l i n e / h u g i 2 0 / c o g b 1 . h t m

/ / . / g b d k / b u i l d / p p c−u n k n o w n−l i n u x 2 . 2 / g b d k / b i n / l c c −o p i x e l p i x e l . c

#i n c l u d e <gb / gb . h>

#i n c l u d e <s t d i o . h>

#i n c l u d e <gb / d r a w i n g . h>

i n t main ( )

{ c h a r x0 =64 , y0 =68 , x1 =100 , y1 = 8 8 ; c h a r x , y , dx , dy ;

i n t D ;

c o l o r (DKGREY, WHITE, SOLID ) ; / / p r i n t f ( ” H e l l o W o r l d\n ” ) ; / / t r a c e ’ d ’ u n e d r o i t e

x=x0 ; y=y0 ; dx=x1−x0 ; dy=y1−y0 ;

D=0; / / e n ( x 0 , y 0 ) , l ’ e r r e u r e s t n u l l e ! w h i l e ( x<x1 )

{ p l o t p o i n t ( x , y ) ;

D+=dy ; / / o n e x p r i m e e r r e u r∗d x

i f (D>0) {y+=1;D−=(dx ) ;} / / s i c o l o n n e c h a n g e , r e t r a n c h e d x x++;

}

/ / t r a c e ’ d ’ u n c e r c l e x=dx ; y =0; / / x = r a y o n

D=1−x ; / / D @ x =r , y =0

w h i l e( y<=x )

{ p l o t p o i n t ( x+x0 , y+y0 ) ; y++;

i f (D<=0) D+=2∗y +1;

e l s e {x−−;D+=2∗(y−x ) +1;}

}

w h i l e( 1 ){} / / l o o p f o r e v e r }

5. `A chaque incr´ement nous ajoutons ∆yqui vaut au plus 160. Cette op´eration est r´ep´et´ee au plus 160 fois donc 160×160 = 25600 qui tient sur 16 bits. La variable doit donc ˆetre un short puisqu’un char ne peut supporter une telle variable dans le pire cas, et un long est un gaspillage de ressources.

Références

Documents relatifs

Calculer la probabilit´ e des ´ ev´ enements suivants (Il n’est pas demand´ e de faire le calcul num´ erique et on pourra conserver les probabilit´ es sous forme de fractions mais

Il sera tenu compte dans la correction de la pr´ esentation et de la r´ edaction correcte des d´ emonstrations..

[r]

[r]

• Retrouver exp´ erimentalement les r´ esultats th´ eoriques vus en cours par un choix judicieux des valeurs des composants, ou de la fr´ equence du g´ en´ erateur.. •

Toutefois, l’int´egration des ´equations n’est pas toujours possible et dans ce cas, l’utilisation de constantes du mouvement permet tout de mˆeme une description partielle

Th´eor`eme du moment cin´etique M6 Propri´et´e : Le moment d’inertie d’un corps change si l’on modifie la fa¸con dont sa masse est r´epartie autour de l’axe de rotation..

L’inconv´enient essentiel des SSI est que le serveur HTTP doit lire ligne ` a ligne le code HTML de toute page `a renvoyer (tout au moins celles d’un suffixe d´etermin´e tel que