1

Bonjour à tous !

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.

image.thumb.png.9ea44fc7b99694aace723c7c17defd01.png

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. cowboy

image.thumb.png.582530681b554353b6a7aa716ff0c29d.png

mouse_01.thumb.JPG.984366914979602813fba9e8840d5395.JPG


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)

mouse_04.thumb.JPG.2e2e5a8c283f4b42fd434cb4e887ab3a.JPG
mouse_04.thumb.png.9cd9787542c88c7d1258600ae060ae09.png

[/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...

image.thumb.png.f79fb687006a3a34469c1dff67fac683.png

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.

probe-shuttle_mouse.thumb.JPG.0f80367760d6df2919836a8618539b5d.JPG

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...)

image.thumb.png.b8d63b4fe1392877d1cf39d99e116bf0.png

image.thumb.png.60d53412640c379824c80d6f3cbf2f73.png


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 wink

sgdk_test.thumb.JPG.18d568833f1650afe78d6230f92aaf4a.JPG


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 !

2

Très sympa ce projet ! top

Il me semblait qu'il y avait existé un clavier pour Megadrive, mais en fait c'était pas officiel, et ça ne servait que pour un service en ligne qui n'existait plus (donc pas vraiment d'intérêt de l'émuler) :
https://segaretro.org/XB%E2%88%80ND_Keyboard
avatar
— Zeroblog —

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Dans les annonces de l'époque Virgin il était question d'un clavier pour je ne sais quoi.
Le SGDK pourrait gérer des inputs clavier donc ?
Ma grand-mère fait du vélo

4

Le Saturn Keyboard est documénté ( tout comme la Sega Mouse ) sur l' excellent site de Sik :
Saturn keyboardPlutiedevUsing the keyboard released for Saturn on your Mega Drive!

Il est aussi supporté par l'émulateur BlastEM donc déjà il est possible de tester les rares démos qui supportent le clavier avec ça.

Pour un support SGDK , j'ai mis à disposition ma démo de test qui est basée sur SMDT et qui fait une petite lib portable pour utiliser le clavier :
MD-IO/saturn-keyboard/sgdk/src at main · X-death25/MD-IOGitHubUSB peripherals on Sega Mega Drive — powered by RP2040 Zero - X-death25/MD-IO

tu as juste à copier KB_Saturn.c et KB_Saturn.h et tu as le minimum pour utiliser le clavier dans ton homebrew.