Home

Mini-projet assembleur Pong 68k

image

Contents

1. Mini projet assembleur Pong 68k t100 com2 HyperTerminal Fichier Edition Affichage Appel Transfert 2 Dle 213 alal Professeur responsable SAVATON Guillaume Etudiants I1 FRAN OIS S bastien BARON Julien Sommaire 1 Introduction 1 1 But 2 Conception des librairies 2 1 str asm 2 2 sci asm 3 Sp cifications du projet 3 1 Description 3 2 D marche 3 3 Mode d emploi du jeu 4 Outils 4 1 L diteur de code 42 Le Makefile 4 3 Le d bogueur 5 Conception liste et description des fichiers 5 1 cste inc 5 2 balle asm 5 3 barre asm 5 4 collision asm 5 5 compteur asm 5 6 curseur asm 5 7 jeu asm 6 Algorithmes employ s 6 1 Le SCI et le terminal VT100 6 2 Les barres 6 2 1 Structure 6 2 2 Affichage 6 3 La balle 6 3 1 Structure 6 3 2 Gestion des collisions 6 4 D roulement du jeu 7 Etat d avancement 8 Conclusion Projet Pong68k aAA A W LU W 05 E E E EE Dnu p es si ni N Vo 00 oo p N Projet Pong68k 1 Introduction 1 1 But du mini projet D couvrir la programmation en assembleur d un microprocesseur 68000 par le d veloppement de librairies mises par la suite en uvre dans un projet La premi re librairie contient la gestion de cha nes de caract res celles ci tant repr sent es en m moire par une suite d octets code ASCII termin e par un caract re nul Nous avions besoin pour
2. l affichage et ne dessinons les barres que lors de leur d placement Toujours pour optimiser nous ne r affichons pas toute la barre mais seulement la partie qui a chang Dans jeu asm void maj _ affichage barre t_ barre barres int8 i for i 0 i lt NB_ BARRES i if barreli gt y delta 0 if barreli gt y barrel i gt y delta lt YMIN barreli gt y barrel i gt y delta gt YMAX effacer _ barre barrelil afficher barre barrelil if barreli gt y_ delta 0 barrefi gt y barref i gt y delta gt 0 1 1 barre i gt y_ delta 0 Dans barre asm void effacer _barre t_ barre barre if barre y_delta 0 Barre ne bouge pas return else if barre y_ delta lt 0 Barre monte gt Effacement du caract re du bas placerCurseur barre x barre y TAILLE BARRE 1 else Barre descend gt Effacement du caract re du haut placerCurseur barre x barre y afficherRS232 Effacement par affichage d un espace void afficher barre t_ barre barre if barre y_ delta 0 return else if barre y_ delta lt 0 Barre monte gt Affichage d un caract re au dessus de la barre placerCurseur barre x barre y 1 else Barre descend gt Affichage d un caract re au dessous de la barre placerCurseur barre x barre y TAILLE BARRE afficherRS232 CARACTERE BARRE Dans le programme assembleur le label maj_affichage_barr
3. sur les murs verticaux en incr mentant le compteur adverse Il faut essayer de renvoyer la balle de l autre c t et surtout viter que la balle ne passe entre le mur et la barre car elle rebondirait plusieurs fois entre la barre et le mur et chaque rebond le compteur sera incr ment 4 Outils 4 1 L diteur de code Nous avons tr s vite voulu chercher une alternative l dition des fichiers dans Notepad Apr s avoir utilis GVim nous avons install Scite un diteur libre supportant aussi la coloration syntaxique de l assembleur du 68000 http scintilla sourceforge net SciTEDownload html 4 2 Le Makefile Nous avons choisi de r diger un makefile pour le projet de mani re ne pas avoir assembler les fichiers manuellement chaque modification Il se pr sente sous la forme suivante JEU_SRCS jeu jeu asm jeu barre asm jeu balle asm jeu collision asm jeu curseur asm jeu compteur asm JEU_PRM jeu jeu prm RCS sci sci asm STR_SRCS str str asm STARTUP_SRCS startup startup asm makeall makesci makestr makestartup ASM JEU_SRCS LINK JEU_PRM makesci ASM SCI_SRCS makestr ASM STR_SRCS makestartup ASM STARTUP_SRCS Projet Pong68k Ce makefile appel sans param tre assemble nouveau chaque fichier et effectue la liaison Nous avons essay d crire un makefile avec une r gle implicite pour indiquer comment trans
4. on modifie la postion FFFF0000 0 descendre 6C o 70 DO Touche p re ue gt monter equipe 2 FFFFFFFF 0 casen FFFFFFFF 1 D3 D3 Num ro de la barre dont on modifie la position FFFFFFFF ia 2504 Status TSN2YC 6D DO Touche m re ue gt descente equipe 2 case_fin 1 D3 D3 Num ro de la barre dont on modifie la position descendre A0 D3 D1 D1 barre y de la barre modifier num ro barre dans D3 l D3 D2 D2 barre_y_delta de la barre modifier num ro barre dans 74 00 00 04 00 MIN D1 FF 3A 8A 49 OC nez_y_delta F5 D9 63 54 06 1 D2 F7 52 49 32 94 sauvegarde_delta 57 BF El 6F 8B C4 E4 B1 ED 5B 5A 87 50 Dl barr e la barre modifier num r re dans D3 30 08 5B F5 l D3 D2 D2 barre_y_delta de la barre modifier num ro barre dans El Bl Dl 47 BB YMAX LONGUEUR_BARRE 1 D1 Si on est en bas de l cran on remet z ro la variation 22 0D 34 7B naz_y_delta 83 2E B8 41 1 D2 F4 03 DF 43 sauvegarde_delta 63 83 0B F9 15 B1 F7 5B naz_y_delta 26 49 A7 5F MOVE B 0 D2 D2 contient le barre y_ delta de la barre 41 DA 7F 56 sauvegarde_delta F9 B5 F2 E9 MOVE B D2 Al D3 Sauvegarde de la variation de y dans le barre_y_delta de la A9 66 EF D4 Si deux barre r effectuer la sauvegarde de la seconde barre ici 68 2A D4 33 in orm aran a For Help press F1 STEPPED OVER Exemple d utilisation du d bogueur Un point d arr t a t plac dans la fonction d interruption de r ception de
5. que STR COMPLETE Etape 2 7 Biblioth que SCI COMPLETE Etape 3 Gestion d interruption dans SCI COMPLETE Etape 4 Incrustation d horloge NEANT Etape 5 MPLET D veloppement de Pong 68k co 8 Conclusion Nous avons trouv que le mini projet tait un compl ment essentiel au cours de microprocesseur propos en Il Il pourrait m me tre int ressant de le commencer plus t t de mani re pouvoir b n ficier du cours et dans la m me semaine de l application concr te d criture et d boguage de code Nous avons appr ci de nous investir dans un projet que nous avions choisi Nous sommes rapidement parvenus obtenir un programme ludique ce qui tait motivant M me si le d veloppement sur microprocesseur 68000 n est plus vraiment d actualit ce projet nous a permis de voir bien en d tails le fonctionnement de deux points techniques int ressants la mise en uvre de l instruction LINK et le passage d un nombre d arguments variable quivalent du va_list en C Nous sugg rons de remettre en tat les cibles cass es pour l ann e prochaine et d y fixer des c bles afin que ces d tails mat riels n entravent pas le d roulement du mini projet 12
6. 5 compteur asm Ce fichier contient l ensemble du code g rant les compteurs afficher_cpt Dessine le compteur pass en param tre 5 6 curseur asm Ce fichier contient l ensemble du code g rant le d placement du curseur du terminal VT100 placer_curseur Place le curseur aux coordonn es pass es en param tre 5 7 jeu asm Ce fichier contient le code principal de l application ainsi que la d finition des variables globales main Fonction principale initialisation suivie de la boucle principale infinie recevoir_touche Fonction d interruption g rant l appui sur des touches Projet Pong68k 6 Algorithmes employ s 6 1 Le SCI et le terminal VT100 Cette partie explique comment nous utilisons notre p riph rique de communication RS232 SCI pour communiquer avec un terminal de type VT100 Nous pouvons envoyer au terminal des caract res pour lui indiquer qu il doit se pr parer recevoir une commande s quence d chappement suivi de la commande proprement parler Nous n utilisons que deux des multiples commandes d un terminal VT100 La premi re nous est fort utile tout au long du programme Elle consiste placer le curseur l endroit que l on souhaite sur l cran du terminal Pour cela nous utilisons la s quence P PH Remplacer les P par respectivement la position en abscisse et la position en ordonn e du curseur La seconde consiste effacer enti rement l cran avec la s quence
7. PJ Voici les diff rentes possibilit s d utilisation de cette commande remplacer la lettre P par le num ro correspondant l une d entre elles 0 Effacement partir du curseur jusqu la fin de l cran 1 Effacement du d but de l cran jusqu au curseur 2 Effacement de tout l cran pas de d placement du curseur Lors de cet effacement on souhaite remettre le curseur sa position initiale 0 0 Pour cela nous utilisons la s quence 0 0H qui nous remet la position d origine 6 2 Les barres 6 2 1 Structure Chaque barre ou raquette est repr sent e par sa position dans la fen tre abscisse et ordonn e et un entier indiquant la variation d ordonn e que subit la barre Dans jeu asm typdef struct s_barre int8 x y int8 y_delta gt 0 barre descend lt 0 barre monte t_barre Le choix de prendre un y_delta gt O pour une barre qui descend vient de la configuration de l cran Pour trouver la nouvelle position de la barre il suffira donc d additionner l ancienne position avec les valeurs de son delta 0 0 e XMAX YMAX LA Origines des coordonn es dans le terminal Projet Pong68k 6 2 2 Affichage L affichage ne peut se faire par rafra chissement complet et syst matique de l cran car 9600bauds cela serait bien trop lent Nous optimiserons donc celui ci en ne transmettant que les modifications apporter
8. caract re Une touche a donc t frapp e sur le terminal son code est en DO 0x71 soit q la barre du joueur 1 doit donc descendre le microprocesseur va changer la valeur de barre_y_delta du joueur 1 puis quitter la fonction d interruption La boucle principale se chargera de redessiner la barre par la suite Projet Pong68k 5 Conception liste et description des fichiers 5 1 cste inc Ce fichier d ent te contient l ensemble des constantes d finissant la taille des barres leurs coordonn es initiales l espace de jeu Les autres fichiers asm sont syst matiquement accompagn s d un inc associ contenant les XREF 5 2 balle asm Ce fichier contient l ensemble du code g rant le d placement des balles ainsi que leurs rebonds afficher_balle Dessine la balle pass e en param tre effacer_balle Efface la balle pass e en param tre maj_balle Calcule les nouvelles coordonn es de la balle et tiens compte des rebonds sur les murs 5 3 barre asm Ce fichier contient l ensemble du code g rant le d placement des barres ainsi que leurs rebonds afficher_barre Dessine la barre pass e en param tre effacer_barre Efface la barre pass e en param tre 5 4 collision asm Ce fichier contient l ensemble du code g rant les rebonds sur les barres et les murs verticaux calcul_position_ futur Teste si la balle va taper sur une barre ou un mur Si oui met jour les vecteurs vitesse pour la faire rebondir 5
9. ci_disable_rx_irq D sactive Projet Pong68k 3 Sp cifications du projet 3 1 Description Nous avons choisi de r aliser un jeu inspir du c l bre jeu Pong parmi les premi res r alisations ludiques dans l histoire de l informatique Ping Pong sur Odyssey de Magnavox 1972 pr curseur du Pong d Atari 3 2 D marche Nous choisi de r utiliser dans un premier temps une partie du code de l tape 3 dans laquelle trois balles parcouraient le terminal en rebondissant sur les bords Nous avons d cid de nous appuyer sur cette gestion du rebond d une balle pour la r utiliser dans notre Pong en ajoutant le rebond sur les raquettes et en gardant la possibilit d augmenter ais ment le nombre de raquettes et de balles Nous avons alors commenc d velopper le code de gestion d une raquette puis des collisions avec celle ci Durant ce d veloppement nous avions pr vu la possibilit d int grer facilement une seconde raquette en utilisant syst matiquement un adressage indirect index sur l indice du joueur Enfin nous avons mis en place la gestion d un compteur incr ment lorsque la balle rebondit sur le mur oppos Projet Pong68k 3 3 Mode d emploi du jeu Le jeu se joue deux les touches sont les suivantes Joueur 1 Joueur 2 Monter la A P barre Descendre la M barre Q La balle ne sort jamais il n y a pas de remise en jeu Elle rebondit tout simplement
10. e n est pas une fonction elle fait partie int grante de la boucle principale du programme Les tests ont t r alis s avec et sans l optimisation d affichage qui consiste ne r afficher que ce qui a chang haut et bas de la barre La diff rence est flagrante Si nous devions tout r afficher chaque fois nous verrions l cran que la balle serait consid rablement ralentie ce qui montre bien que l envoi d un caract re prend du temps brid dans un premier temps par la liaison 9600 bauds et ensuite seulement par la vitesse du microprocesseur Projet Pong68k 6 3 La balle Cette partie est un peu plus complexe puisqu il faut g rer les rebonds de la balle sur les bords de l cran et sur les raquettes Il s agit donc de mettre en place un contr le de collision 6 3 1 Structure Chaque balle parce qu il est ais d en mettre plusieurs pour compliquer le jeu est repr sent e par 4 arguments ses coordonn es abscisse et ordonn e et ses vecteurs vitesses composante en x et composante en y Dans jeu asm typedef struct s_balle int8 x y Compris entre XMIN et XMAX YMIN et XMAX int8 vx vy Compris entre 1 et 1 6 3 2 Gestion des collisions Le probl me est simple d s que la barre rencontre un mur vertical ou une raquette il faut changer la direction de la composante en x de son vecteur vitesse D s qu elle rencontre un mur horizontal il faut inver
11. former un fichier asm en 0 sans succ s Top Z 1 mp asm microil jeu mak gt gt in Z 1 mp asm microil jeu mak line 17 col 0 pos 325 0 asm VAN ERROR M5010 Illegal line error s O warning s 0 information message s command line jeu mak Error occured while processing 4 3 Le d bogueur BF HI WAYE Z 11 mp asm micro l project ini TE Eile View Run ICD Component Source Window Help olsa ele 2 alle ZAT mp asm microi jeu DBG Description R ception d une touche Entr es Aucune Sorties recevoir_touche xdef recevoir_touche MOVEM L DO D3 A0 Al A7 nous n avons plus besoin de tester si un caract re est pr sent dans le SCI cer si l interruption est lev e il y a un caract re 12 abs 60C 0x01 D2 48 abs 610 0x00 D2 D2 0 A1 D3 W A7 D0 D1 D2 D3 A0 AL LEA L barre_y A0 A0 Adresse du barre_y de la premi re barre en m moire p A0 A7 LEA 1 barre_y_delta Al Al Adresse du barre_y_delta de la premi re barre en m moire OxO0FFFCOO L A0 JSR sci_receive_byte 0x0003 0 A0 casea 5 0x80 23 A0 61 D0 sTouche a re ue gt monter equipe 1 Su caseq 0 D3 D3 Num ro de la barre dont on modifie la postion monter 5F4 71 D0 Touche q re ue gt descente equipe 1 30DB4 C casep 64 200F4 0 D3 D3 Num ro de la barre dont
12. pouvoir g rer du texte dans le projet de mettre au point diff rentes fonctions nous permettant de cr er et de modifier une cha ne de caract res La deuxi me librairie g re quant elle le p riph rique de communication s rie int gr la cible Elle le configure et g re l envoi et la r ception d octets chang s avec l ordinateur au moyen d hyper terminal Elle utilise un m canisme d interruption pour la r ception d un caract re Nous aurons aussi besoin d une fonction permettant d envoyer directement une cha ne de caract res 2 Conception des librairies 2 1 str asm Cette librairie fournit l ensemble des fonctions de gestion de cha nes d octets strin Calcule la longueur d une cha ne strcpy Copie une cha ne strcat Concat ne deux cha nes stremp Compare deux cha nes itoa Convertit un entier en sa repr sentation ASCII sprintf Ecrit dans une cha ne selon un format donn 2 2 sci asm Cette librairie fournit l ensemble des fonctions n cessaires l utilisation du port s rie de la cible 68000 sci_init Configure le port vitesse vecteur d interruption pour la r ception d un octet sci_send_byte Envoie un octet sci_has_byte Test si un octet est en attente dans le tampon d entr e sci_receive_byte Lit un octet re u sci_send_ascii_string Transmet une cha ne termin e par nul sci_receive_ascii_string Re oit une cha ne sci_enable rx_irq Active l interruption de r ception d octet s
13. quer par crit je vais tenter l explication par un sch ma balle x balle vx barre x Pas de collision Pas de collision On voit sur ce sch ma que lorsque la balle arrive par exemple au dessus de la barre il n y a pas collision Mais si au tour suivant la barre monte la balle va s afficher par dessus la barre puis continuer avancer puisque aucune collision n aura t d tect e et le programme effacera donc le caract re de la barre 6 4 D roulement du jeu Tout le jeu se d roule dans une seule et m me fonction qui tourne en boucle ind finiment Elle remet jour la position de la balle et celle des barres Le y_delta des barres est mis jour sur une interruption du SCI donc on ne r affiche les barres que de temps en temps puisque l on teste dans maj_affichage_barre si y__delta est diff rent de 0 void main void t_balle balles t_barre barres init_reg Initialisation du p riph rique SCI registre niveau d interruption init _balle balles init _barre barres while 1 main_boucle effacerBalle balles maj_balle balles barres afficher_balle balles maj_affichage_barre barres 11 Projet Pong68k 7 Etat d avancement Les objectifs des tapes O 3 ont t atteints et nous avons un jeu simple qui fonctionne de mani re satisfaisante Etape Avancement a COMPL TE Prise en main Etape 1 7 Biblioth
14. ser la composante y de son vecteur vitesse Dans balle asm void maj_balle t_ balle balle t_barre barre int8 ip j boolean MAJ for i 0 i lt NB_BALLES i MAJ 1 Collision avec un mur if balle i gt x balle i gt vx lt XMIN balle i gt vx balle i gt vx MAJ 0 else if balle i gt x balle i gt vx gt XMAX balle i gt vx balle i gt vx MAJ 0 if balle i gt y balle i gt vy lt YMIN balle i gt vy balle i gt vy MAJ 0 else if balle i gt y balle i gt vy gt YMAX balle i gt vy balle i gt vy MAJ 0 if MAJ balle i gt x balle i gt vx balle i gt y balle i gt vy Collision avec une raquette calcul_position_futur amp balle i barre 10 Projet Pong68k Dans collision asm void calcul position _futur t_ balle balle t_barre barre int8 i for i 0 i lt NB_BARRES i Si au tour suivant balle et raquette ont m me abscisse C est que l on est sur les abscisses pr c dant la raquette if balle gt x balle gt vx barre i x Balle devant la raquette gt On la renvoie if balle gt y gt barreli y amp amp balle gt y lt barrel i y TAILLE BARRE balle gt vx balle gt vx Dans la majorit des cas notre code fonctionne correctement mais un bug d affichage peut tout de m me arriver Celui ci tant difficile expli

Download Pdf Manuals

image

Related Search

Related Contents

STM32-Primer2  Lennox Hearth 2800HT Karaoke Machine User Manual  Samsung AQ12NSAN Uživatelská přiručka  Télécharger - Case Construction    D16 user rev4.p65  

Copyright © All rights reserved.
Failed to retrieve file