Vendredi 22 Aout 2008
Ça marche !
img J'ai l'honneur (enfin si on peut considérer ça comme un honneur) de vous présenter ce superbe émulateur de GameBoy programmé par mes soins... J'ai toujours voulu en coder un (bon en fait j'avais essayé il y a très longtemps mais comme je savais à peine coder c'était pas facile :D ) mais je ne voulais pas le faire en C#... (en fait il faudrait que je DL Visual Studio 2008 complet pour coder en C# + C++/CLI dans le même projet mais j'ai la flemme :p )
Finalement après réflexion j'ai trouvé un moyen d'organiser les accès mémoire qui m'a semblé raisonnable donc j'ai craqué, et je me suis lancé là dedans :D (Puis de toutes façons, observer le fonctionnement des jeux réels - pas des homebrew - permet de glaner quelques infos pour coder un décompilateur sans se prendre la tête :p )
Bon je ne vous le cache pas ça émule pas grand chose pour l'instant, mais c'est suffisant pour la plupart des jeux.
En fait seuls sont supportées pour l'instant les ROM de 32 Ko ou bien les ROM avec un controlleur de type MBC1 (pour ceux à qui ça causerait %) ), puisque c'est ce que j'ai implémenté pour les tests.
J'ai directement tenté de bien émuler les timing (enfin outre les bugs inévitables qui s'y étaient glissés... mais je pense que je ferai un autre post là dessus :) ) et grâce aux quelques ROM utilisant des effet spéciaux, j'ai pu corriger les bugs qui me restaient.. Des fois un minuscule bug d'affichage peut empêcher un jeu de fonctionner c'est assez "amusant" (en fait sauf pour celui qui doit déboguer, c'est à dire moi :p )
Bon, comme ce n'est pas vraiment fini (mais ça marche ! :D ) le son n'est pas émulé, et la synchronisation est faite à la hache (enfin avec des Sleep(), c'est super précis quoi :D ), et je n'en suis pas sur à 100% parce que je n'ai pas fait assez de tests avant, mais je crois que j'ai ruiné les performances en codant l'affichage des sprite dans la routine de rendu :D
(Oué du coup je suis un peu démotivé, mais je vais essayer de profiler tout ça avant de rajouter le support de la GBC, puis du son ^^)

img

A part ça, voilà une petite liste des fonctionalités implémentés et non implémentées:

Implémenté:
- Emulation GB-Z80, semi optimisé, sans bugs connus
- Emulation du controlleur LCD, du timer, et du joypad (X et Y pour A et B, Entrée et Maj Droit pour Start et Select)
- Emulation des ROMS simple (sans MBC)
- Emulation des ROMS MBC1
- Routine de rendu taillée à la hache (ça ne gère pas entièrement les priorités, notamment la priorité BG > sprite mais ce n'est utilisé que rarement dans les jeux)
- Interface graphique Windows Forms, c'ets super important :D
- Rendu via GDI+ (System.Drawing) uniquement
- Débogueur graphique avec support des points d'arrêt (la vue du code désassemblé est pas encore parfaite, mais j'y ai passé suffisamment de temps déjà et je préférais me concentrer sur l'émulation du hardware, mais ça sera amélioré même si ça ne sert qu'à moi ^^)
- Visualiseur de Tiles
- Visualiseur de Maps
- Fonction Pause (sisi !)
- Fonction Ouvrir une ROM (hé oui, c'est essentiel ! :D )

Non implémenté:
- Optimisation de l'émulation du CPU (vu que la routine d'émulation est en partie générée par un outil, certains opcodes (principalement ceux utilisant H ou L) peuvent être substantiellement améliorés, d'autres sont déjà implémentés au mieux)
- Le son (oui ce n'est pas prioritaire :p )
- Un vrai rendu (A priori Managed DirectX, mais je devrais pouvoir me démerder pour proposer d'autres options si besoin ^^)
- Une vraie routine de rendu (A supposer que l'actuelle soit réellement ce qui ralentit l'émulateur, mais c'est probable vu que c'est la seule qui fait appel à des tableaux managed (oui c'est mal ! Enfin non c'est bien mais pour un émulateur c'est mal :p ))
- Sauvegarder la RAM lorsque la cartouche a une batterie
- Système de snapshot (enfin après tout le reste ça :p )
- Support GameBoy Color
- Support Super GameBoy
- Fonction screenshot
- Support des autres controlleurs mémoire (MBC2, MM01 si je trouve des infos dessus, MBC3, MBC4, MBC5, MBC6 et MBC7 si je trouve des infos également, puis peut-être les controlleurs exotiques TAMA5, HuC-1 et HuC-3, et support de la GameBoy Camera peut-être...)
- Emulation GameBoy Printer
- Fonction Zoom (La fonction est déjà implémentée et par défaut l'émulateur commence en 200%, mais je sais pas comment organiser les menus en fait :p )
- Visualiseur de mémoire (pas implémenté par flemme :D )
- Visualiseur de sprites (pas implémenté car j'ai codé directement (à l'arrache) les sprites dans la routine de rendu)
- Visualiseur de ports E/S (j'y avais pas pensé au début, sinon ça serait déjà fait, mais en fait c'est un concept qui déchire :D )
- D'autres trucs que j'ai du oublier sans doute, mais ça finira par me revenir

img
Un petit screen pris lors du débogage du dernier "gros" bug qui restait =)


Et je finis bien évidemment par le traditionnel lien pour télécharger. Pour l'instant, il suffit juste d'avoir .NET 2.0 pour que ça fonctionne, donc n'hésitez pas, et si vous trouvez des bugs.

Je ne fournit pas de ROM, mais vous pouvez en trouver là bas: PDRoms

Bon vous vous en foutez surement mais moi je suis content #love#
Posté à
14:51
 par GoldenCrystal - | Programmation

4. GoldenCrystal à 15:16 24/08/2008 -
Moué, on verra si j'ai la flemme de finir le décompilateur après ou pas :D
(Puis sinon c'est en .NET parce que #love# Windows Forms, et que j'ai pas dequoi mélanger C# et C++ à l'heure actuelle)

3. vince à 03:30 23/08/2008 -
Bravo, à ce rythme là tu le feras fonctionner sur TI avant Godzil !

2. Zerosquare à 23:44 22/08/2008 -
Si c'est pas malheureux d'utiliser .NET pour ça franchement :p

Je plaisante mais bravo hein #top#

1. Sasume à 20:05 22/08/2008 -
Chapeau !

Pseudo :

Adresse mail : (optionnel)

Site web : (optionnel)

Veuillez entrer la somme de quatre et cinq :
Message :


 RSS  - ©yNBlogs 2004