raphnet.net banner

Lecteur/programmeur de cartouche de jeu SMS / Mark-III

twitter@raphnetlabs
Buy Me a Coffee at ko-fi.com
Contenu

Résumé

J'ai conçu un lecteur/programmeur pour les cartouches de jeu et cartes pour l'écosystème Sega Master System / Mark III / GameGear. Mon but avant tout était de pouvoir programmer facilement les cartouches SMS et GameGear de ma conception, mais en tant que lecteur, mon montage me permet également de transférer le contenu des ROMs des jeux de ma collection vers mon PC pour y jouer à l'aide d'un émulateur.

Les fonctionnalités actuelles de mon projet sont les suivantes: Il vous en faut un? Cet outil est disponible dans ma boutique en ligne.


goto top


Jeux SMS à 50 et 44 broches

Mon montage comporte deux fentes, une pour chaque type de cartouche. Il y a peu à dire. L'important est d'insérer la cartouche dans la bonne fente!
Exemple avec une cartouche nord-américaine

Exemple avec une cartouche nord-américaine

Exemple avec un jeu japonais

Exemple avec un jeu japonais


goto top


Support Game Gear

Mon circuit ne comporte pas de connecteur dédié pour les jeux Game Gear, mais j'ai conçu un adaptateur qui passe par le connecteur à 50 broches:

Exemple de lecture d'un jeu Game Gear

Exemple de lecture d'un jeu Game Gear

L'adaptateur pour jeux Game Gear

L'adaptateur pour jeux Game Gear



N'arrivant pas à me procurer des connecteurs Game Gear neufs (originaux ou pas) j'ai acheté sur un site d'enchères une console en état "perte totale" ou presque. Crasse, rouille, dégâts de piles, mauvais condensateurs... tout était au rendez-vous. Par chance, le connecteurs de cartouche était récupérable!



Si vous connaissez un endroit où l'on peut se procurer des connecteurs de cartouche Game Gear neufs (ou remis à neuf) veuillez m'en faire part! J'aimerais bien pouvoir offrir cet adaptateur en version déjà assemblée.

En attendant, les circuits imprimés sans connecteur sont disponibles dans ma boutique, pour ceux qui d'une manière ou d'une autre sont en possession d'un connecteur Game Gear et aimerait se fabriquer un adaptateur.

Bare PCB, component side

Bare PCB, component side

Circuit, côté soudures

Circuit, côté soudures


goto top


Support des cartes Sega / Mycard

Mon montage n'a pas de fente dédiée pour les cartes Sega / My Card, mais ces cartes peuvent tout de même être lues en utilisant un Card Catcher:

Exemple utilisant un Card Catcher

Exemple utilisant un Card Catcher


goto top


Lire un ROM (méthode manuelle)

Attention: Ne jamais changer les cartouches alors que le montage est sous tension (fil USB branché)

Ce circuit se branche à un PC par un port USB et fonctionne en tant que port série virtuel. Sous Linux, un character device tel que /dev/ttyACM0 devrait apparaître dès que vous branchez le montage. Sous Mac, c'est le même principe, mais le character device portera un autre nom. Sous Windows 10, ce sera COM-quelque-chose.

Il s'agit ensuite de lancer votre logiciel de communication favori (par exemple, minicom sous Linux) et de le configurer pour accéder au port série virtuel correspondant au montage. Vous pourrez alors interagir avec le firmware à l'aide de commandes clavier simples. Tapez ? puis sur entrée afin d'obtenir de l'aide:

> ?
Supported commands:
  boot    Enter DFU bootloader
  reset    Reset the firmware
  init    Init. mapper hw, detect cart size, detect flash...
  r     addresshex [length]
  dx    Download the ROM with XModem
  ux    Upload and program FLASH with XModem
  ce    Perform a chip erase operation

>
Avant d'utiliser la commande dx qui permet de télécharger le contenu du ROM de la cartouche vers votre PC, vous devez utiliser la commande init qui devrait détecter la taille du jeu.

La taille du jeu est déterminée en détectant à partir de quelle banque de 16 ko le contenu semble se répéter. Pour le moment cela fonctionne avec tous les jeux que j'ai utilisé, mais je prévois permettre de forcer une taille manuellement dans une version à venir du firmware. (Selon les demandes que je recevrai)
> init
54 4d 52 20 53 45 47 41 4d 57 eb 74 04 51 00 4c 
Bank 0 CRC: c1b6, first byte f3
Bank 1 first byte: 45
Bank 2 first byte: 00
Bank 4 first byte: 00
Bank 8 CRC: c1b6
ROM size set to 131072
Cartridge type: ROM

>
> dx
Dumping the rom using XMmodem. 1024 blocks.
Please start the download... CTRL+C to cancel.
Il faut alors démarrer un téléchargement XModem dans votre logiciel de télécommunication. Sous Linux avec minicom, il suffit de faire CTRL+A, appuyer sur R, choisir le protocole XModem et donner un nom au fichier (p. ex: jeu.sms) pour lancer le téléchargement.

goto top


Lire un ROM (script python)

J'ai également écrit un petit script simple en python qui permet d'automatiser les étapes de la section précédente. Le script est nommé dumpcart.py, et l'aide (argument -h) est en ce moment comme suit:
usage: dumpcart.py [-h] [-i] [-r OUTFILE] [-p INFILE] [-d DEVICE]

Dump/Program tool for smscprogr

optional arguments:
  -h, --help            show this help message and exit
  -i, --info            Provide information about the cartridge
  -r OUTFILE, --read OUTFILE
                        Read the cartridge contents to a file.
  -p INFILE, --prog INFILE
                        (Re)program the cartridge with contents of file
  -d DEVICE, --device DEVICE
                        Use specified character device.
À titre d'exemple, voici la commande que je tape pour lire une cartouche sous Linux:
./dumpcart.py -d /dev/ttyACM0 -r superjeu.sms
Le script est plutôt bavard pour le moment, car je tiens à avoir le plus d'information possible si jamais quelque chose ne fonctionne pas. Mais si tout va bien, à la fin le fichier superjeu.sms sera créé, et il sera possible de la passer en argument à une émulateur, tel que higan, meka ou autre...


goto top


Programmer un ROM (méthode manuelle)

Via votre logiciel de communication (par exemple, minicom sous Linux) il faut d'abord taper la commande init, qui devrait détecter qu'il s'agit d'une cartouche reprogrammable plutôt que d'un ROM. (La dernière ligne de l'extrait ci-dessous le confirme)
> init
init 54 4d 52 20 53 45 47 41 ff ff 51 8a 99 99 00 4c
Bank 0 CRC: da45, first byte f3
Bank 1 first byte: 78
Bank 2 first byte: dd
Bank 4 first byte: 44
Bank 8 CRC: da45
ROM size set to 131072
Cartridge type: FLASH. Manufacturer ID=0xc2, Device=0xa4 => MX29F040 (supported)
La taille détectée pourrait être inexacte (c'est le cas ici, puisqu'il s'agit d'une cartouche de 512 ko, et pas seulement 128 ko) mais cela n'a pas d'importance pour l'upload.

Avant l'écriture, il faut effacer le contenu de la cartouche (de la puce flash qu'elle contient en fait) en utilisant la commande ce (Chip Erase):
> ce
Erasing chip...
Done.
>
Cela prends normalement quelques secondes. Ensuite, il s'agit de télécharger un ROM (fichier .SMS ou .GG) vers la cartouche. Pour ce faire, démarrez l'upload à l'aide de la commande ux:
> ux
READY. Please start uploading.
Ensuite lancez le téléchargement XModem à l'aide de votre logiciel de télécommunication. Par exemple, avec minicom sous Linux, il s'agit de faire CTRL+A, ensuite S (pour Send), choisir XModem et puis le fichier.

La puce flash de la cartouche est programmée pendant le téléchargement. Lorsque celui-ci prends fin, la cartouche est programmée.

Important: N'oubliez pas de débrancher le câble USB avant de retirer la cartouche!

goto top


Programmer un ROM (script python)

J'ai également écrit un petit script simple en python qui permet d'automatiser les étapes de la section précédente. (Voir aussi la section "Lire un ROM (script python)")

Pour programmer un jeu, par exemple, mon homebrew donkey.sms, j'utilise simplement la commande suivante:
./dumpcart.py -d /dev/ttyACM0 -p donkey.sms
Le script se charge d'effacer la flash (commande ce), de lancer l'upload (commande ux) et de transférer le contenu du fichier passé en paramètre (ici donkey.sms) par le protocole XModem.
Sending command: ce
ce
Erasing chip...
Done.
> 
Starting upload
Sending command: ux
Uploading
Upload completed with success.
Sending command: 
Done.
Lorsque le script prends fin, la programmation est terminée. Essayez votre jeu!

Important: N'oubliez pas de débrancher le câble USB avant de retirer la cartouche!

Programmation d'une cartouche raphnet.

Programmation d'une cartouche raphnet.

Le jeu programmé et fonctionnel!

Le jeu programmé et fonctionnel!


goto top


Firmware

Mon souhait en fournissant un firmware open-source est de faciliter la vie à quiconque souhaiterait améliorer ou modifier ce projet selon leurs besoins (supporter d'autre type de flash, un autre type de mapper, etc) puisse le faire faire immédiatement et sans trop obstacles.

Cela dit, n'hésitez pas à me contacter s'il y a un problème ou une fonction que vous souhaiteriez avoir! Je verrai ce que je peux faire.

Version 1.0
5 février 2021 (Vendredi)
  • Première publication
Fichier(s):
smscprogr-1.0.hex (32.8 KB)
Ce projet est aussi disponible sur GitHub!
Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet, vous pouvez m'écrire ou utiliser le dépôt GitHub:
https://github.com/raphnet/smscprogr

goto top


Mettre le firmware à jour

Le firmware est programmé dans le micro-contrôleur en utilisant le bootloader DFU d'atmel. Sous linux, il suffit d'utiliser dfu-programmer. Cet exemple est basé sur Linux, mais dfu-programmer existe également pour Windows.

Étape 1: Mettre le circuit en mode "boot loader"

dfu-programmer s'attends à communiquer avec le bootloader DFU d'atmel. Il faut donc transmettre la commande boot pour demander au firmware d'exécuter le bootloader. Dès l'exécution de cette commande, le port série virtual disparaîtrera et votre logiciel de communication affichera sans doute une erreur. Mais pendant ce temps, le micro-contrôleur réapparaitrera sur le BUS USB sous une autre identité, celle d'un micro-contrôleur Atmega32u2 en mode bootloader.

Étape 2: Effacer, programmer et démarrer l'application

Ignorez votre logiciel de communication s'il est en erreur, et ouvrez un terminal. Il s'agit alors d'utiliser dfu-programmer pour effacer d'abord, reprogrammer ensuite, et puis démarrer le nouveau firmware.
dfu-programmer atmega32u2 erase
dfu-programmer atmega32u2 flash smscprogr-1.0.hex
dfu-programmer atmega32u2 start

goto top


Avertissement

Je ne saurais être tenu responsable pour les dommages que l'utilisation des informations ou la mise en œuvre des instructions présentées sur cette page pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement.

goto top


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2021, Raphaël Assenat
Site codé avecSite codé avec vimDernière mise à jour: 24 février 2021 (Mercredi)