Adaptateur manettes Sega Saturn à USB

Introduction

Ce projet permet d'utiliser des manettes à l'origine destinées pour la console Sega Saturn sur un PC par USB. À l'aide du schémas et logiciel fournis sur cette page, il est possible de fabriquer un adaptateur (en utilisant les connecteurs d'une rallonge Saturn) ou encore de bâtir le circuit à même une manette (si l'espace le permet).

La version actuelle du firmware supporte:
  • Les manettes de base (boutons ABCXYZ, L/R et Start)
  • La manette analogique
  • La souris
Le respect du standard USB HID permet une utilisation immédiate avec la plupart des systèmes d'exploitataion modernes sans nécessiter l'installation de pilotes. Testé sous Linux, Windows 7 64-bit, MacOS X et la Playstation 3 de Sony.




Photos

Voici les périphériques avec lesquels j'ai développé cet adaptateur.
Official Sega Analog MK-80117

Official Sega Analog MK-80117

'HORIPAD SS'. Model HSS-11

'HORIPAD SS'. Model HSS-11

Performance Super Pad 8. Model P-400

Performance Super Pad 8. Model P-400

Sega 'shuttlemouse' HSS-0102

Sega 'shuttlemouse' HSS-0102


Fonctionne aussi avec la HSS-0101 et la MK-80116 de Sega.

Si vous avez la chance de tester avec d'autres modèles de manettes, veuillez m'en informer pour que je puisse les mentionner ici.


L'adaptateur apparaît comme un hybride souris/joystick sous Windows 7 tel que démontré par les saisies d'écran suivantes:



Photos provenant des utilisateurs:

William Schneider m'a fait parvenir les photos suivantes de son assemblage. Il me confirme aussi que tout fonctionne bien avec la manette HSS-0101 de Sega, et que le firmware 1.1 fonctionne très bien avec la PS3.
Prototype

Prototype

Assemblage final

Assemblage final

Assemblage final

Assemblage final

Sega HSS-0101

Sega HSS-0101





Boutons

Les configurations de bouton suivantes sont disponibles. Pour activer une configuration spécifique, appuyez et maintenez le bouton correspondant, branchez l'adaptateur (ou allumez le pc/console), puis relâchez le bouton.

SLS (default)
SaturnUSBPS3
A2 X
B3 Circle
C6 R1
X1 Square
Y4 Triangle
Z5 L1
S10Start
L7 L2
R8 R2
SLS Alt (hold A)
SaturnUSBPS3
A2 X
B3 Circle
C6 R1
X1 Square
Y4 Triangle
Z5 L1
S9Select
L7 L2
R8 R2
VIP (hold B)
SaturnUSBPS3
A1 Square
B2 X
C3 Circle
X4 Triangle
Y5 L1
Z6 R1
S9 Select
L7 L2
R8 R2
v1.0 (hold C)
SaturnUSBPS3
A1 Square
B2 X
C3 Circle
X4 Triangle
Y5 L1
Z6 R1
S7 L2
L8 R2
R9 Select

Avec la PS3, les mappings SLS (defaut) et SLS ALt sont généralement les plus appropriés. On m'informe qu'ils fonctionnent très bien avec (au moins) Super Street Fighter IV, Tekken 6, BlazBlue: Continuum Shift, Virtua Fighter 5, Arcana Heart 3, Hard Corps: Uprising, Soul Calibur, Disgaea 3 et Mortal Kombat 9.


Configuration du « 3D Controller »

La configuration de la manette 3D est parfois difficile à cause des leviers L/R à l'arrière de la manette qui, au repos, n'occupent pas une position centrée. Le problème se manifeste généralement lors de la configuration des boutons dans un émulateur, tel Yabuse. En effet, dès qu'une association de bouton est tentée, l'émulateur détecte que le levier L ou R est actif est lui associe le bouton ou l'axe qui devait être configuré.

Si vous exécutez ce petit outil sous Windows, les données de calibration de la manette seront altérées de manière à ce que la position de repos de L et R soit vue comme centrée par les jeux, et donc inactive.

Téléchargement: gc_calfix_ng.exe

Avant le correctif

Avant le correctif

Après le correctif

Après le correctif

Manette 3D configurée

Manette 3D configurée

Exécution de l'outil

Exécution de l'outil


Idéalement, les émulateurs ne devraient considérer que les boutons physiques qui deviennent actifs après la sélection du bouton à configurer. Cela éviterait ce genre de problème...




Schema

Voici le schéma de base. Pour le raccordement avec la manette Saturn, se référer au tableau.

# broche segaI/O Micro.Descriptin/ Nom(s)
1N/AAlimentation 5 volts / VCC
2PC2D1
3PC3D0
4PC5S0
5PC4S1
6PB5D5 ou TL (handshake)
7PC0D3
8PC1D2
9N/AGND

J'ai utilisé l'information sur la page suivante comme point de départ:
Sega Saturn Pad Info.

Le signal documenté "+5v (Inp)" dans la page donnée ci-dessus est en fait une sortie logique sur la manette analogique et la souris. Ce signal fait partie du mécanisme de communication. Ce mécanisme est en fait le même que le multitap pour genesis utilise tel que documenté ici:
http://www.raphnet.net/divers/documentation/genesis_multitap.txt


Liste des composantes:
RefDescription
U2Un micro-contrôleur ATmega8a ou Atmega8. Ne pas utilise la famille ATMEGA8L-*, car l'horloge de 12Mhz dépasserait la limite.
R1Résistance de 1.5k. Ordinaire au carbone 1/4 watt.
R2, R3Résistance de 68 ohms. Ordinaire au carbone 1/4 watt.
D2, D3Diodes Zener de 3.6 volts.
Y1Crystal de 12 mhz
C2, C3Condensateurs de 18 pf. Si votre cristal recommande une autre valeur, utilisez la.
C1Condensateur de 1 uf. Installer près du ATmega8.
J2Connecteur 2x3 (6 broches), espacement 2.54mm. Pour la programmation du ATmega8.

Pour la connection USB, simplement dénuder un cable USB et souder les fils directement sur le circuit. USB utilise des couleurs de fils standardisés, mais soyez vigilant, il y a parfois des exceptions.
Couleur Description
  Rouge +5 volts
  Noir Ground
  Vert D+
  Blanc D-




Programmation et code source

Les microcontroleurs sont des composantes qui doivent être programmés pour qu'elles fassent quelque chose d'utile. Voici donc le fichier .hex qu'il faut programmer dans le microcontroleur.

Plusieurs micro-contrôleurs possèdent ce qu'on appelle 'Fuse bytes'. Dans le cas du ATmega8, il y en a deux: Le 'high byte' et le 'low byte'. Ces deux octets servent à configurer certains paramètres du microcontroleur. Quel type d'horloge? Crystal? Résonateur? Oscillateur RC interne? Permettre la programmation par ISP? Il est très important de configurer les fuse bytes avec les bonnes valeurs. L'utilisation de mauvaises valeurs peut rendre le micro-contrôleur inutilisable.

Pour ce projet, voici les bonnes valeurs:
high byte = 0xc9, low byte = 0x9f

Pour de l'information sur la programmation d'un AVR, visitez ma page sur la programmation d'AVR

Pour ceux qui aimeraient modifier le comportement de l'adaptateur ou supporter d'autres types de manettes, le code source est disponible sous la license GPLv2.



Contactez moi à l'addresse raph@raphnet.net si vous faites des modifications intéressantes.

Combinaison Vendor ID/Product ID USB:
Veuillez ne pas réutiliser ma combinaison VID/PID pour des projets dérivés ou autres. Obtenez-en un vous-même (ou inventez-en un à vos risques). J'avais acheté les miens chez mecanique dans le temps où ils en revendaient car c'était moins cher que de devenir membre du forum des implémenteurs USB (2000$ US)...

Version v2.0
14 Juillet 2013
Compatibilité améliorée:
  • Séparation des fonctions souris et joystick. La souris est détectée à la mise sous tension. Règle les problèmes avec Linux et MaxOS X.
Fichier(s):
saturn_usb-2.0.tar.gz (66.2 KB)
saturn_usb-2.0.hex (12 KB)
Afficher les versions précédentes
Version v1.1
27 Juillet 2011
  • Ajout de différents 'mappings' pour être mieux adapté à la PS3. 4 configurations, choisies en maintenant appuyé des boutons lors du branchement USB, sont offertes. Voir la section boutons pour les détails.
Fichier(s):
saturn_usb-1.1.tar.gz (71.2 KB)
saturn_usb-1.1.hex (11.8 KB)
Version v1.0
2 Juillet 2011
  • Première version. Support des périphériques suivants:
    • Manette standard (ABCXYZ, Start, L/R et D-Pad)
    • Manette analogique
    • Souris
  • License GPLv2
Fichier(s):
saturn_usb-1.0.tar.gz (68.1 KB)
saturn_usb-1.0.hex (11 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/saturn_usb



Circuit imprimé

Une partie de ce projet peut être réalisé en montage en surface à l'aide de mon circuit Multiuse PCB2. Voici une photo de ce circuit:
Multiuse PCB2:



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.