header
[[stellae:wiki]] 
 

Cartouche Game Boy 32ko universelle

Préambule

Voici un projet qui renaît par miracle... Ce petit montage date d’au moins deux ans. Je l’ai proposé il y a peu a un ami qui voulait s’entrainer à la programmation microprocesseur sans devoir passer trop de temps sur la construction d’une carte complète (CPU + RAM + ROM + périphériques...).

Mais la nostalgie est de suite revenue à grand pas. Même si aujourd’hui je programme plus volontier sur la Playstation 2, je tiens à partager ici les plans de cette interface permettant de charger des roms de 32k dans une Game Boy.

Elle a été concu de manière à être totalement indépendante du système d’exploitation utilisée sur la machine hôte, ce qui rend cette cartouche utilisable aussi bien sous GNU/linux que sous Windows pour ne citer qu’eux. (J’utilise exclusivement linux sur des machines assez “exotiques”, paramètre qui a fortement influencé l’architecture de cette interface).

Tous ce dont vous avez besoin est un port série et un logiciel d’émulation de terminal gérant le protocol x-modem (par exemple minicom sous unix/linux ou hyperterminal sous windows). Si vous ne possédez pas de port série mais que vous avez au moins un port USB, des solutions existent, dirigez vous vers la Foire aux Questions en fin de page.

Cette cartouche est compatible avec les Game Boy traditionnelles (Game Boy / Pocket / Light & Color). Vous pouvez l’utiliser dans une Game Boy Advance (SP) mais en mode émulation. Ceci signifie que cette cartouche ne permet pas de faire tourner du code natif GBA.

Cette version du hardware ne permet de charger/lire que des programmes ayant une taille de 32ko maximum (taille minimum d’une cartouche Game Boy). Cependant, la conception d’une version permettant de gérer des tailles de code plus importantes a débuté (émulation des différents MBC 1)). Malheureusement, c’est un travail auquel je ne peux consacrer beaucoup de temps aujourd’hui.

Avant de débuter je tiens à signaler que cette interface n’a pas été conçue dans le but de faire fonctionner des jeux commerciaux, vous trouverez sur internet une multitude de ROMs (mini-jeux, démos...) libres de droits qui fonctionneront parfaitement avec ce montage.

Je vous invite à lire la page destinée au développement Game Boy sous linux pour ceux qui désireraient écrire quelques petits programmes sympas.

Schéma fonctionnel

 :gb:picture_01.png

Schémas électriques

Déporter l’intelligence coté cartouche nécessite l’utilisation d’un microcontrôleur. Un pic 16F877(A) a donc été utilisé. C’est un µC facile à ce procurer et il existe de nombreux outils pour le programmer. Le programme destiné au µC est disponible au paragraphe firmware. Les sources (assembleur) sont également disponibles.

Aucun composant constituant cette interface ne devrait être difficile à ce procurer.

Les schémas présentés ici sont provisoires mais néanmoins corrects. Des versions “haute-définitions” (200dpi) sont disponibles en suivant le lien situé sous chacun des schémas.

 :gb:picture_00.jpg

Cette image est également disponible en version haute-définition.

Ci-dessus, connection entre le µC et la SRAM.

 :gb:picture_02.jpg

Cette image également est disponible en version haute-définition. FIXME

Ci-dessus, connection entre la game boy (port cartouche) et la SRAM.

Voici le brochage du connecteur cartouche :

 :gb:picture_03.png

Mise en oeuvre

Remarques générales

Le programme integré dans l’interface inclu un interpréteur de commande. Pour les transferts de fichiers (programmes/ROM GB), le protocole x-modem est utilise.

Voici la liste des commandes disponibles donnée par la commande HLP (help/aide):

CLR   Clear Screen
DMP   Dump 32KB Cartridge to Serial Port
FIL   Fill 32KB Cartridge with Serial Data
HLP   Display the List of Available Commands
RST   Reset

FIXME Description des commandes

Minicom (Linux/Unix)

L’utilisation de cette interface avec minicom va être suffisamment détaillée ici pour permettre à tous les utilisateurs, même novices, de s’en sortir assez aisément.

Configuration

Nous assumons ici que le “firmware” chargé dans votre interface GameBoy est la version 57600bps 8N1.

:!: Avant de continuer, vérifiez la configuration (droits d’accès) du port série que vous utilisez.

crw-rw-rw-  1 root dialout 4, 64 2005-02-28 00:37 /dev/ttyS0

Lancer Minicom en mode configuration en tapant “minicom -s” et entrez les paramètres suivants :

:gb:picture_05.png

Vous devez également ajouter le paramètre “-c” (détection d’erreurs à l’aide d’un CRC) pour la réception x-modem (ligne F). Voici le tableau qui récapitule la configuration des différents protocoles de transmission (seules les lignes de configuration x-modem importent pour notre interface Game Boy).

:gb:picture_06.png

Pour envoyer des fichiers vers la GB, utilisez la commande FIL. Appuyez ensuite sur CTRL+A suivi de S (Send) puis sélectionnez votre fichier et confirmez. Soyez rapide, sinon le transfert échouera : ce petit souci est décrit ci-dessous dans le paragraphe problèmes connus.

Pour récupérer l’image de la cartouche et l’enregistrer dans un fichier tapez CTRL+A suivi de R (Receive) et entrez le nom du fichier.

:!: L’“implémentation” du protocol x-modem intégrée dans l’interface est une version allegée. En cas d’échec dans la communication (émission ou réception) le µC n’est pas capable de reprendre la main, il doit être redemarré (reset). La gestion du watchdog dans le PIC pourrait faire partie d’une évolution future du programme.

Rappelez-vous qu’à tout moment vous pouvez revenir à l’écran de sélection des commandes en tapant CTRL+A. Pour une liste des commandes taper Z pour afficher l’aide ou bien O pour afficher le menu de configuration de minicom. N’hésitez pas à consulter la page de manuel en ligne relative a minicom.

Captures d'écrans

Problèmes connus

Minicom pose un problème lors de d’un envoi avec x-modem. Le protocole impose que le récepteur renvoie à intervalles reguliers la lettre C (contrôle par CRC) pour déclancher le transfert. Seulement, lorsque l’interface bascule sur le menu de sélection du fichier les caracteres C qui défilent en arrière plan sont assimilés comme les premiers octets de la première trame. Ce problème sur minicom est connu (plusieurs sites évoquent celui-ci), il suffit de sélectionner rapidement le fichier à envoyer. Si le message ci-dessous apparait, redémarrer l’interface.

:gb:picture_04.png

Hyperterminal (Win32)

FIXME

Firmware

Fichiers de programmation du µContrôleur

Pour s’adapter à un maximum de cas, plusieurs vitesses de transfert sont disponibles ici.

Code source

En assembleur, compile avec MPASM. Ce programme, sous licence GPL, est libre.

Empreintes MD5

39248fc3cc07a051d5976892d85e57d3  gb_smartgpak_v1_01a_57600.hex
089992554a8fcbf3ba1dab22a10df18c  gb_smartgpak_v1_01a_38400.hex
b90f08150ce3272dd551d259bf713751  gb_smartgpak_v1_01a_19200.hex
d8530bf653eead96889d9793219a54ff  gb_smartgpak_v1_01a_9600.hex
2d73a7ea99f61ca8696fe23282287a58  gb_smartgpak_v1_01a_src.tar.gz
72183b2d946914503734ecefaabd074c  gb_smartgpak_v1_01a_src.zip

Cartographie mémoire

Réalisation

En images, une version fonctionnelle réalisée sur plaque d’essai.

Une vidéo de l'interface est également disponible. La démo Skinke est ici chargée en mémoire.

FAQ

Les machines modernes ne possèdent pas toujours de port série.

Un adaptateur USB ⇔ série fonctionnera parfaitement. Le driver créera un port série virtuel et vous pourrez accéder à l’interface de manière classique via votre émulateur de terminal. Ceux-ci fonctionnent également très bien sous linux (driver USB SIO inclus dans le source des noyaux récents) et MacOS X.

Quel émulateur de terminal utiliser sous MacOS X ?

ZTERM semblerait convenir.


Game Boy™, Game Boy Pocket™ & Game Boy Color™ are registered trademarks of Nintendo CO., LTD.

Stellae (N. Lemouël) February, 7th 2007 website@stellae.fr

1) MBC est l’abréviation de Memory Bank Controler. Le port cartouche de la Game Boy ne donne accès qu’à un espace d’adressage de 32ko. Cependant la majorité des jeux ont une taille bien supérieure à cette limite. Les MBC servent donc à paginer les programmes contenus dans ces cartouches.
 
gb/gamepak_v1_fr.txt · Dernière modification: 2007/02/22 21:48
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki