Je viens prendre un peu de temps ici , pour partager un projet perso sur lequel je bricole depuis un bon moment : MD-IO.
MD-IO est un adaptateur qui fait pont/abstraction entre le port manette de la Megadrive et un périphérique USB.
C'est peu connu mais le port manette de la Megadrive n'est pas figé : la direction de quasiment toutes les lignes peut être changée, et il y a même un système de détection de périphérique basique. :twisted:
L'idée était donc double :
- pouvoir connecter des périphériques modernes facilement sur Megadrive
- en profiter pour préserver et cloner du hardware rare et coûteux (par exemple souris et clavier, mais j'y reviens plus bas)
La partie hardware se base sur le moderne RP2040 Zero et je me suis arrangé pour que tout rentre dans un petit boitier ABS.

L'idée est simple :
-un cœur gère l'USB Host (lecture du périphérique branché),
-l'autre reproduit fidèlement le protocole natif Sega sur le port DB9 (handshake TH/TR/TL).
Et un petit level shifter vient s'assurer d'envoyer le bon niveau de tension au RP2040.
4 familles de produits, une couleur par type :
🟢 Manette 3 boutons
🔵 Manette 6 boutons
🟡 Souris (remplace la Mega Mouse)
🟣 Clavier (remplace le clavier Saturn)
[/b]
L'histoire
Chaque périphérique a ses spécificités.
Pour la manette 3 boutons, un multiplexage basique avec un mode compatible Mark III / SMS : rien de complexe, c'est bien documenté depuis des années.
Pour la manette 6 boutons, c'est un peu plus complexe avec l'encodage des boutons supplémentaires, mais là encore beaucoup de personnes ont déjà travaillé dessus et ont très bien décrit son fonctionnement.
Pour la version 3 boutons j'ai pris la manette de la MD Mini.
Pour la version 6 boutons, celle de l'Astro City Mini.
Puis il y a la Sega Mouse...
Un joli design, peut aussi être utilisée en trackball si on la met à l'envers : bref, comme toujours chez Sega, du lourd.
Mais conclusion honnête : un gros flop commercial. Elle est difficile à trouver aujourd'hui, même au Japon.
Si deux bonnes soirées de code ont suffi pour avoir un proto fonctionnel pour les deux manettes, pour la souris ce fut une toute autre histoire.
Bien que supportée dans les émulateurs, quand on commence à creuser on s'aperçoit que d'une part tous les jeux compatibles Sega Mouse ne fonctionnent pas, et que la documentation ou le code source des émulateurs se contredisent un peu sur le protocole.
Un grand merci à Eke Eke et à Sik pour avoir bien documenté la base du protocole d'échange.
Dans ma phase de recherche, j'ai appris que la Shuttle Mouse, la souris de la Saturn, peut être connectée sur Megadrive.
Le port manette Saturn n'étant qu'une évolution du port manette Megadrive avec un brochage différent, il est possible de faire un adaptateur passif et de connecter un périphérique Saturn sur Megadrive.
Second point : le protocole est le même entre la Shuttle Mouse et la Mega Mouse (l'ID retournée par le périphérique est également la même pour la souris).
Si la Mega Mouse est rare, la souris Saturn, elle, peut encore se trouver relativement facilement aujourd'hui.
La voie était donc toute trouvée : démonter une Shuttle Mouse et sortir la sonde pour enfin voir le comportement du jeu et de la souris, et cloner ça dans le RP2040.
Grâce à cette approche, j'ai pu faire une implémentation assez précise (mais pas encore parfaite) de la Shuttle Mouse.
De nombreux jeux ont fait leur propre implémentation du protocole, donc écrire un code dont les timings restent compatibles avec l'ensemble, sans régression, a nécessité beaucoup de temps et d'ajustements.
Sur les 28 jeux que j'ai notés comme compatible Sega Mouse à ce stade seulement trois ne fonctionnent pas.
Compatibilités testée sur pas mal de titres Mega Drive et Mega-CD (Monkey Island, Dungeon Master II, Lemmings 2, Dune...)
J'ai fait un GitHub complet avec une sous-section dédiée à chaque périphérique :
https://github.com/X-death25/MD-IO/tree/main
Un clavier sur Megadrive ?
Je ne crois pas qu'il existe de vrai clavier officiel sur Megadrive. Il y a bien eu un adaptateur pour le Mega Anser, mais c'est plus une télécommande.
Une fois encore, c'est la Saturn qui vient à la rescousse
L'émulateur BlastEM supporte d'ailleurs le clavier Saturn comme périphérique côté Megadrive — preuve que l'idée n'est pas si saugrenue.
Côté soft, il existe le projet SMDT, un émulateur de terminal sur Megadrive :
https://github.com/SweMonkey/smdt
Le protocole ressemble à celui de la souris, avec un peu plus de trames d'échange ( 12 au lieu de 9 ).
Un détail amusant sur le fonctionnement : quand aucune touche n'est appuyée, le firmware continue d'envoyer des paquets "idle" plutôt que de simplement ne rien envoyer. Ça peut paraître inutile, mais c'est ce qui permet à la console de continuer son polling normalement sans jamais rester bloquée à attendre une réponse qui n'arrive pas.
Autre point sympa : pour que ça se comporte comme un vrai clavier physique et pas juste un copier-coller brut de l'USB, j'ai implémenté l'effet "typematic" — c'est-à-dire la répétition automatique d'une touche quand on la maintient enfoncée, comme sur n'importe quel clavier. Concrètement : environ 400ms d'attente après le premier appui avant que la répétition démarre, puis une touche envoyée toutes les 60ms tant qu'elle reste maintenue.
J'ai fait deux firmwares pour le clavier : un en version Qwerty et un en version Azerty.
Tout comme pour la souris, vous trouverez sur le GitHub un dossier SGDK avec un exemple de démo pour chacun des périphériques.
Si vous êtes développeurs vous pouvez donc tenter le combo d'un homebrew au clavier et à la souris sur Megadrive

Disponibilité
Le PCB sera open source mais pour ceux qui ne sont pas makers , je compte vendre des adaptateurs assemblés avec le boitier et prêt à l'emploi sur Tindie prochainement.
Si des gens ici sont intéressés, je peux proposer un prix de lancement spécial forum à 30€.
Pour ceux qui viennent à la RGC prochaine , je vais apporté des adaptateurs avec moi et surtout proposé un stand avec les différents types de périphériques jouables.
Dites-moi ce que vous en pensez, et n'hésitez pas si vous avez des questions sur le fonctionnement ou des jeux à tester !


