Gamoover

Besoin de contacter un admin pour une proposition, une suggestion ou discuter d'un probleme ?
C'est ici : High_Cobra, AsPiC ou Pich

[WIP] Décorticage manettes HKT 7300 / HKT7500 / HKT 7700 DreamCast

Démarré par gc339, Vendredi 16 Juillet 2010, 01:21:41 AM

gc339

#32
2) Phase d'initialisation de la manette configurée en mode arcade 6 boutons sans vibreur.

En fait l'enchaînement des trames de cette phase est identique à celui de la manette en configuration standard sans vibreur.

1er échange

Seuls diffèrent les paramètres retransmis dans la deuxième trame, la réponse "Device Status" à la toute première requête "Device Request" effectuée sur la fonction "Controller" du dispositif de base ou "Base Device"


Le début de la 2èm trame "Device Status" retransmise sur le Maple bus après un reset de la DC.




Device Response
***************
Bloc   Octets
00     0x1C   0xA0   0x80   0x05
01     0x01   0x00   0x00   0x00
02     0xFF   0x07   0x00   0x00
03     0x00   0x00   0x00   0x00
04     0x00   0x00   0x00   0x00
05     0x72   0x41   0x00   0xFF     [Ar]
06     0x65   0x64   0x61   0x63   [cade]
07     0x69   0x74   0x53   0x20   [ Sti]
08     0x20   0x20   0x6B   0x63   [ck  ]
09     0x20   0x20   0x20   0x20   [    ]
10     0x20   0x20   0x20   0x20   [    ]
11     0x20   0x20   0x20   0x20   [    ]
12     0x20   0x20   0x20   0x20   [    ]
13     0x64   0x6F   0x72   0x50   [Prod]
14     0x64   0x65   0x63   0x75   [uced]
15     0x20   0x79   0x42   0x20   [ By ]
16     0x55   0x20   0x72   0x6F   [or U]
17     0x72   0x65   0x64   0x6E   [nder]
18     0x63   0x69   0x4C   0x20   [ Lic]
19     0x65   0x73   0x6E   0x65   [ense]
20     0x6F   0x72   0x46   0x20   [ Fro]
21     0x45   0x53   0x20   0x6D   [m SE]
22     0x45   0x20   0x41   0x47   [GA E]
23     0x52   0x45   0x54   0x4E   [NTER]
24     0x53   0x49   0x52   0x50   [PRIS]
25     0x4C   0x2C   0x53   0x45   [ES,L]
26     0x20   0x2E   0x44   0x54   [TD. ]
27     0x20   0x20   0x20   0x20   [    ]
28     0x00   0xAA   0x01   0x2C
CS     0xDB


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
Bloc.Octet
00.1   Command Code = 5 : Device Status
00.2   Destination AP = 10.0.00000 : Port C of Host (DC)
00.3   Source AP = 10.1.00000 : Base Device on Port C
00.4   Data Size = 28

Device ID
Bloc.Octet
01     Function(s) Type = 0x00 0x00 00000000b 00000001b : Only Controller Function
02     Function Definition Block 1 = 0x00 0x00 0x07 0xFF : Controller
02.1      11111111b : First joystick, buttons Start, A, B and C used
02.2      00000111b : Only buttons X, Y and Z used
02.3      00000000b : Analogue triggers and joysticks unused
02.4      00000000b : Unused
03     Function Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04     Function Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
Bloc.Octet
05.1   Destination Region = 11111111b : Area 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Arcade Stick                  "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x00AA = 170 : 17 mA
28.3   Maximun current consuption (little endian) = 0x012C = 300 : 30 mA

Avec cette réponse la DC a obtenu des informations essentielles sur la manette :

  • Les zones géographiques avec lesquelles elle est compatible.
  • Le masque de présence ( Function Definition Block 1 ), elle sait alors quels sont les boutons, les manches et les gâchettes qui équipent cette manette.
  • Le nom du produit qui diffère de celui de la manette en configuration standard

2èm échange et échanges suivants

La DreamCast interroge périodiquement la manette avec une paire de trames "Get Condition" / "Data Transfer" tout comme celle qui a été décortiquée dans le précédent post avec configuration standard de cette manette.
Avec chaque réponse, la DC obtient l'état instantané des boutons et du manche conventionnel ainsi que les états/positions par défaut des boutons, gâchettes et manches analogiques inexistants.
A l'aide du masque de présence obtenu par l'échange "Device Request"/ "Device Status", qui suit immédiatement le reset, La DreamCast peut oblitérer ou ignorer les états ainsi que les positions par défaut de ceux et de celles dont la manette n'est pas équipée.




Petit aparté avec le Twin Stick

A la lueur de :
On peut imaginer la trame "Device Status" que pourrait retransmettre le Twin Stick :



   
Device ID
Bloc.Octet
01     Function(s) Type = 0x00 0x00 00000000b 00000001b : Only Controller Function
02     Function Definition Block 1 = 0x00 0x00 0xF7 0xFE : Controller
02.1      11111110b : 1st joystick, buttons Start, A, B equipped
02.2      11110111b : 2nd joystick, buttons X, Y and Z equipped
02.3      00000000b : Analogue triggers and joysticks not equipped
02.4      00000000b : Unused
03     Function Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04     Function Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
Bloc.Octet
05.1   Destination Region = 11111111b : Area 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Twin Stick                    "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x????
28.3   Maximun current consuption (little endian) = 0x????


La seule inconnue, qui pourrait être bloquante, est le "Product Name". Ce nom de produit pourrait être aussi bien "Dreamcast Twin Stick" que "Twin Stick HKT-7500", toutes les options sont permises.
Il n'y a que l'analyse des trames d'un Twin Stick réel qui tranchera.
Reste à savoir si le jeu "Virtual On" vérifie cette information plutôt que d'analyser le masque des états/positions des boutons/manches/gâchettes pour déterminer si un Twin Stick est effectivement connecté à la DC.

Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





f4brice

#33
Citation de: gc339 le Dimanche 22 Août 2010, 15:10:47 PM
La seule inconnue, qui pourrait être bloquante, est le "Product Name". Ce nom de produit pourrait être aussi bien "Dreamcast Twin Stick" que "Twin Stick HKT-7500", toutes les options sont permises.
Il n'y a que l'analyse des trames d'un Twin Stick réel qui tranchera.

Une possibilité est de chercher (avec un éditeur hexa) dans le dump des ROM propres à la DC ou à un jeu donné la chaîne de caractères "Twin" ou "Stick".
Avec un peu de chance, la chaîne exacte sera présente en clair en plein milieu du dump.

gc339

#34
Citation de: f4brice le Dimanche 22 Août 2010, 16:59:42 PM
Une possibilité est de chercher (avec un éditeur hexa) dans le dump des ROM propres à la DC ou à un jeu donné la chaîne de caractères "Twin" ou "Stick".
Avec un peu de chance, la chaîne exacte sera présente en clair en plein milieu du dump.

Je pense plutôt que la vérification, si vérification il y a, doit plutôt se faire au niveau du jeu "Virtual On" le seul qui utilise le Twin Stick. Le logiciel de la DC ne doit vérifier que la licence étant donné qu'un accessoire comme le Twin Stick a du être commercialisé bien après la sortie de celle-ci.
Bien sûr, ce n'est que mon avis, peut-être que les faits me contrediront.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#35
3) Phases d'initialisation de la manette configurée en standard 4 boutons + gâchettes, vibreur en service.

Suite au reset de la DreamCast, la manette est sollicitée par une trame "Device Request" pour envoyer son status.
Elle répond par une trame "Device Status" à tout point de vue identique à celle de la manette standard sans vibreur, à l'exception près qu'elle indique la présence de dispositifs d'extension ou "Expansion Devices" en positionnant les bits associés dans le champ adresse source du bloc d'entête.
Le bloc "Device ID" reste identique y compris les deux indications de consommation.

Header   (AP = Absolute Position)
00.1   Command Code = 5 : Device Status
00.2   Destination AP = 10.0.00000 : Port C of Host (DC)
00.3   Source AP = 10.1.01010 : Base Device on Port C, Expansion Devices n° 2 and n° 4 connected
00.4   Data Size = 28

La DreamCast demande ensuite l'état des boutons/manches/gâchette par une trame "Get Condition" conventionnelle. La manette lui répond par une trame "Data Transfert" tout aussi conventionnelle mais en indiquant à nouveau la présence des deux dispositifs d'extension dans le champ adresse source du bloc d'entête.

Après avoir obtenu cette réponse, la DreamCast émet une nouvelle requête "Device Request" à destination maintenant du premier dispositif d'extension connecté.




DC Request
**********
00   0x00   0x80   0x82   0x01
CS   0x03


   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 1 : Device Request
00.2   Destination AP = 10.0.00010 : Expansion Device n° 2 on Port C
00.3   Source AP = 10.0.00000 : Port C of Host (DC)
00.4   Data Size = 0

La manette répond aussitôt avec une trame "Device Status" donnant le status de ce 1er dispositif d'extension.




Device Response
***************
00   0x1C   0x82   0x80   0x05
01   0x00   0x01   0x00   0x00
02   0x00   0x00   0x01   0x01
03   0x00   0x00   0x00   0x00
04   0x00   0x00   0x00   0x00
05   0x75   0x50   0x00   0xFF     [Pu]
06   0x50   0x20   0x75   0x72   [ru P]
07   0x20   0x75   0x72   0x75   [uru ]
08   0x6B   0x63   0x61   0x50   [Pack]
09   0x20   0x20   0x20   0x20   [    ]
10   0x20   0x20   0x20   0x20   [    ]
11   0x20   0x20   0x20   0x20   [    ]
12   0x20   0x20   0x20   0x20   [    ]
13   0x64   0x6F   0x72   0x50   [Prod]
14   0x64   0x65   0x63   0x75   [uced]
15   0x20   0x79   0x42   0x20   [ By ]
16   0x55   0x20   0x72   0x6F   [or U]
17   0x72   0x65   0x64   0x6E   [nder]
18   0x63   0x69   0x4C   0x20   [ Lic]
19   0x65   0x73   0x6E   0x65   [ense]
20   0x6F   0x72   0x46   0x20   [ Fro]
21   0x45   0x53   0x20   0x6D   [m SE]
22   0x45   0x20   0x41   0x47   [GA E]
23   0x52   0x45   0x54   0x4E   [NTER]
24   0x53   0x49   0x52   0x50   [PRIS]
25   0x4C   0x2C   0x53   0x45   [ES,L]
26   0x20   0x2E   0x44   0x54   [TD. ]
27   0x20   0x20   0x20   0x20   [    ]
28   0x06   0x40   0x00   0xC8
CS   0x67


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 5 : Device Status
00.2   Destination AP = 10.0.00000 : Port C of Host (DC)
00.3   Source AP = 10.0.00010 : Expansion Device n° 2 on Port C
00.4   Data Size = 28

Device ID
01   Function Type(s) = 0x00 0x00 00000001b 00000000b : Only Vibration Pack Function
02   Function Definition Block 1 = 0x00 0x00 00000001b 00000001b : Vibration Pack
02.1      00000001b : Unknown usage ! no information about this bit !
02.2      00000001b : Unknown usage ! no information about this bit !
02.3      00000000b : ?
02.4      00000000b : ?
03   Function Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04   Function Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
05.1   Destination Region = 11111111b : Area 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Puru Puru Pack                "
13.1   License) (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x00C8 = 200 : 20 mA
28.3   Maximun current consuption (little endian) = 0x0640 = 1600 : 160 mA


  • La manette indique dans le champ adresse source de l'entête que ce sont bien les données associées au dispositif d'extension n°2 qui suivent.
  • Dans le bloc "Device ID" il est indiqué que le dispositif n°2 possède une unique fonction : c'est le pack vibreur.
  • Le champ "Product Name" du bloc "Fixed Device Data" donne le nom du dispositif : "Puru Puru Pack", c'est celui du pack officiel SEGA DreamCast.
    Les consommations spécifiques de ce dispositif sont aussi indiquées en fin de ce même bloc.

Après avoir obtenu cette réponse, la DreamCast émet une seconde requête "Device Request" à destination cette fois ci du deuxième dispositif d'extension connecté.




DC Request
**********
00   0x00   0x80   0x88   0x01
CS   0x09


   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 1 : Device Request
00.2   Destination AP = 10.0.01000 : Expansion Device n° 4 on Port C
00.3   Source AP = 10.0.00000 : Port C of Host (DC)
00.4   Data Size = 0

Et là, chou blanc, pas de réponse en provenance de la manette.
Le dispositif n°4 n'a rien à déclarer, cet ersatz de manette doit être bogué.
Faudra quand même que je vérifie, sur une manette officielle équipée d'un "Puru Puru Pack" tout aussi officiel, combien de dispositifs d'extension sont effectivement connectés.

Après une péride d'attente, la DC reprend ses interrogations cycliquement pour obtenir l'état des boutons/manches/gâchette avec le duo de trames "Get Condition" / "Data Transfert".
La manette continue à déclarer systématiquement la présence du disposif d'extension n°4 dans l'adresse source de sa réponse.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





ɐɹqoƆ‾ɥƃᴉH

Bon, Scanlogic2 commandé pour moi aussi ^^

Et vu que maintenant je vais avoir beaucoup beaucoup plus de temps pour moi et pour bricoler, je vais essayer de faire avancer la chose si je peux te filer un coup de main gc339...

Je vais aussi voir ce qu'il est possible de créer comme truc à base de chip custom en vue de faire un truc tout propre pour l'upcb...

gc339

#37
Citation de: High_Cobra le Mardi 24 Août 2010, 15:45:26 PM
Bon, Scanlogic2 commandé pour moi aussi ^^

Bienvenue parmi les utilisateurs du Scanalogic 2 !


Citation de: High_Cobra le Mardi 24 Août 2010, 15:45:26 PM
je vais essayer de faire avancer la chose si je peux te filer un coup de main gc339...

Dans l'immédiat je recherche un Twin Stick DreamCast pour décortiquer les trames qu'il échange avec la DreamCast. Si quelqu'un en à un et qu'il peut s'en séparer momentanément ou définitivement ...


Citation de: High_Cobra le Mardi 24 Août 2010, 15:45:26 PM
Je vais aussi voir ce qu'il est possible de créer comme truc à base de chip custom en vue de faire un truc tout propre pour l'upcb...

J'espère que tu pourras nous exposer, ici sur gamoover, ce projet au fur et à mesure de son avancement.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#38
5) Phases d'initialisation du Twin Stick

Encore faudrait-il que j'en ai un à disposition !
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#39
J'ai acquis un lot comprenant le jeu "House of Dead 2" et un light gun Mad Catz, le tout pour une somme modique. La boite du jeu est cassée mais le light gun est en très bon état externe et il fonctionne.




   
J'ai aussi acheté une rallonge que je n'ai pas encore reçue.

Mon intention est d'enlever la gaine du câble en son milieu sur une faible longueur pour accéder au 5 fils du Maple bus.
Une fois cette rallonge insérée entre l'accessoire et la DC, je pourrais alors raccorder les pinces de l'analyseur Scanalogic 2 sur les fils du bus à travers l'ouverture pratiquée au centre du câble. Ainsi, pour avoir accès aux fils du Maple bus, il ne me sera plus nécessaire de démonter l'accessoire dont je veux décortiquer les échanges.

A défaut de rallonge, il a fallu démonter le light-gun pour sortir les fils du Maple bus. L'opération a été bénéfique car elle a permis de se rendre compte que la butée de la gâchette était cassée.



Le light gun Mad Catz une fois la butée de gâchette réparée. Il est encore équipé des fils nécessaires à l'observation des signaux sur le Maple bus.

Cette butée, qui limite normalement la course de la gâchette, est réalisée par un axe creux en plastique. Cet axe n'est pas d'un seul tenant, il est constitué de deux demi-axes creux en vis à vis et solidaires chacun d'une coquille du gun.
Rien ne solidarisait les deux demi-axes entre eux quand je l'ai démonté, aussi un des deux était cassé à sa base, au ras de la coquille.
L'évidement à l'intérieur des demi-axes est cylindrique et d'un diamètre un poil supérieur à 3 mm.
Un trou a été percé dans la coquille, celle de la cassure. Une vis à tête fraisée de Ø3 introduite dans ce trou maintient le demi-axe cassé en place, le tout à été encollé à l'araldite pour que l'ensemble soit bien monolithique.
La vis étant presque aussi longue que les deux demi-axes mis bout à bout, son extrémité libre pénètre sans jeu dans l'évidement cylindrique du demi-axe de l'autre coquille et assure ainsi la rigidité de la butée.




4) Phases d'initialisation du Light Gun Mad Catz.

Suite au reset de la DreamCast, le Light Gun est sollicité par une trame "Device Request" pour envoyer son status.




DC Request
**********
00   0x00   0x80   0xA0   0x01
CS   0x21


   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 1 : Device Request
00.2   Destination AP = 10.1.0000 : Base Device on Port C
00.3   Source AP = 10.0.00000 : Port C of Host (DC)
00.4   Data Size = 0

Le Light Gun Mad Catz répond par une trame "Device Status" ,tout comme les autres accessoires déjà tracés, à l'exception près qu'il indique la présence de deux fonctions pour le dispositif de base :

  • Une fonction Light Gun.
  • Une fonction Controller car le Light Gun possède un bouton Start et un bouton B ainsi qu'un pavé directionnel.
Le bloc "Device ID" comporte donc deux blocs de définition (Function Definition Block), un pour chaque fonction.




Device Response
***************
00   0x1C   0xA0   0x80   0x05
01   0x81   0x00   0x00   0x00
02   0x00   0x00   0x00   0x00
03   0xFE   0x00   0x00   0x00
04   0x00   0x00   0x00   0x00
05   0x72   0x44   0x01   0x01     [Dr]
06   0x63   0x6D   0x61   0x65   [eamc]
07   0x20   0x74   0x73   0x61   [ast ]
08   0x20   0x6E   0x75   0x47   [Gun ]
09   0x20   0x20   0x20   0x20   [    ]
10   0x20   0x20   0x20   0x20   [    ]
11   0x20   0x20   0x20   0x20   [    ]
12   0x20   0x20   0x20   0x20   [    ]
13   0x64   0x6F   0x72   0x50   [Prod]
14   0x64   0x65   0x63   0x75   [uced]
15   0x20   0x79   0x42   0x20   [ By ]
16   0x55   0x20   0x72   0x6F   [or U]
17   0x72   0x65   0x64   0x6E   [nder]
18   0x63   0x69   0x4C   0x20   [ Lic]
19   0x65   0x73   0x6E   0x65   [ense]
20   0x6F   0x72   0x46   0x20   [ Fro]
21   0x45   0x53   0x20   0x6D   [m SE]
22   0x45   0x20   0x41   0x47   [GA E]
23   0x52   0x45   0x54   0x4E   [NTER]
24   0x53   0x49   0x52   0x50   [PRIS]
25   0x4C   0x2C   0x53   0x45   [ES,L]
26   0x20   0x2E   0x44   0x54   [TD. ]
27   0x20   0x20   0x20   0x20   [    ]
28   0x06   0xFA   0x00   0xA0
CS   0x2F


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 5 : Device Status
00.2   Destination AP = 10.0.00000 : Port C of Host (DC)
00.3   Source AP = 10.1.00000 : Base Device on Port C
00.4   Data Size = 28

Device ID
01     Function Type(s) = 0x00 0x00 00000000b 10000001b : Light-Gun + Controller Functions
02     Function Definition Block 1 = 0x00 0x00 0x00 0x00 : Nothing defined for Light-Gun function
03     Function Definition Block 2 = 0x00 0x00 0x00 0xFE : Controller function
03.1      11111110b : First joystick, buttons Start, A and B used
03.2      00000000b : Second joystick, buttons D, X, Y and Z not equipped
03.3      00000000b : Analogue triggers and joysticks not equipped
03.4      00000000b : Unused
04     Function Definition Block 3 = 0x00 0x00 0x00 0x00 : Third function does not exist

Fixed Device Status
05.1   Destination Region = 00000001b : only North America
05.2   Dummy = 0x01
05.3   Produc Name (30 Ascii) = "Dreamcast Gun                 "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x00A0 = 160 : 16 mA
28.3   Maximun current consuption (little endian) = 0x00FA = 250 : 25 mA

A noter que ce Light Gun Mad Catz n'est compatible que pour l'Amérique du Nord.

Le Light Gun indique donc qu'il supporte deux fonctions en tant que dispositif de base. Comme c'est le bit de rang le plus élevé qui est prioritaire dans le mot "Function Type(s)", c'est donc le bloc de définition du Light Gun qui suit en premier, celui du "Controller" est en second puisqu'il est le moins prioritaire.

  • Le bloc du "Controller" fournit comme les fois précédentes le masque de présence des boutons/manches/gâchettes.
  • Le bloc "Light Gun" est vide, il ne fournit aucun masque. La raison est que la gâchette du Light Gun ne fonctionne pas comme un bouton standard.

Le light Gun est équipé d'un bloc photoélectrique (lentille, cellule, amplificateur) qui transforme l'impulsion lumineuse reçue en signal électrique, ce dernier n'étant validé que quand la gâchette est appuyée.
Le bloc photoélectrique ne reçoit cette impulsion lumineuse que quand le spot du balayage écran illumine la surface vers laquelle le Light Gun est pointé.
Le balayage écran étant très rapide, il faut que la réponse du Light Gun vers la DreamCast soit immédiate quand le spot est focalisé sur la cellule à travers la lentille, c'est pourquoi une trame spécifique est utilisée pour cet accessoire : La trame "SDCKB Occupancy Permission".




Petit aparté : La trame "SDCKB Occupancy Permission"


Il n'y a que la DreamCast elle même qui puisse générer cette trame, elle débute par un fanion constitué de 8 fronts descendants sur SDCKB pendant que SDCKA est maintenu à un niveau bas.
En fin de fanion, SDCKA retourne à l'état haut. Puis il repasse à nouveau à l'état bas pour indiquer que les rôles sont inversés sur SDCKB : pendant toute cette période de palier à l'état bas sur SDCKA, c'est le dispositif de base qui est émetteur sur SDCKB et la dreamcast qui est réceptrice sur ce même fil.
La DreamCast signale qu'elle reprend la main sur SDCKB quand le palier est terminé, c'est à dire quand elle repositionne SDCKA au niveau haut.
Il n'y a pas de fanion "End", la trame se termine avec la fin du palier bas sur SDCKA.

En fait cette inversion des rôles sur SDCKB ne se fait pas n'importe quand, elle est synchronisée avec le balayage de l'écran.

  • Le début du palier bas sur SDCKA est synchrone avec le départ de la trame vidéo, le spot quitte alors le coin gauche en haut d'écran
  • Le palier bas s'achève avec la fin de la trame vidéo, c'est à dire quand le spot est arrivé dans le coin droit en bas d'écran.
  • Pendant ce palier bas sur SDCKA, le Light Gun prend le contrôle de SDCKB pendant que la DreamCast se met en observation sur ce même fil.
    Le Light Gun peut donc retransmettre en temps réel sur SDCKB l'impulsion crée par le passage du spot devant son optique.
    A la DreamCast de déterminer la position du spot sur l'écran au moment où elle reçoit cette impulsion sur SDCKB.
Pendant tout ce temps, le Maple bus est monopolisé et est indisponible pour tout autre échange, il ne le redevient que pendant les temps de retour trame.


  • La trame "SDCKB Occupancy Permission" ne comporte pas de paramètre ni d'adressage à sa suite, cette trame ne peut donc s'adresser qu'au dispositif de base présent, en l'occurrence le seul Light Gun connecté sur le port.
  • Ces trames ne circulent pas en permanence sur le Maple bus, elles ne sont activées qu'à des moments bien déterminés d'un jeu, au moment où des cibles apparaissent sur l'écran.
    Aussi pour l'instant, bien que je les voie passer sur l'oscilloscope, je n'arrive pas à capturer le début ou la fin d'une de ces trames avec l'analyseur Scanalogic. Il faut dire que le palier bas sur SDCKA dure presque 20 ms avec un écran à 15 kHz, ce qui est beaucoup plus que la période de capture de l'analyseur quand l'échantillonnage est effectué à 10 Mhz.




Après avoir reçu le status du Light Gun, la DreamCast se met à requérir cycliquement l'état de son pavé directionnel ainsi que de ses boutons tout comme elle le fait avec une manette ordinaire :




DC Request
**********
00   0x01   0x80   0xA0   0x09
01   0x01   0x00   0x00   0x00
CS   0x29


   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 9 : Get Condition
00.2   Destination AP = 10.1.00000 : Base Device on Port C
00.3   Source AP = 10.0.00000 : Port C of Host (DC)
00.4   Data Size = 1

01     Function Type(s) = 0x00 0x00 00000000b 00000001b : Only Controller Function





Device Response
***************
00   0x03   0xA0   0x80   0x08
01   0x01   0x00   0x00   0x00
02   0000   0000   0xFF   0xFF
03   0x80   0x80   0x80   0x80
CS   0x2A


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |
   |   
   |   
   |   
   |   
   |   
   |   

Header   (AP = Absolute Position)
00.1   Command Code = 8 : Data Transfer
00.2   Destination AP = 10.0.00000 : Port C of Host (DC)
00.3   Source AP = 10.1.00000 : Base Device on Port C
00.4   Data Size = 3

Data
01     Function Type(s) = 0x00 0x00 00000000b 00000001b : Only Controller Function

02     Function Data : 11111111b 11111111b 0x00 0x00
02.1      11111111b : Right a, Left a, Down a, Up b, Start, A, B et C
02.2      11111111b : Right b, Left b, Down b, Up b, D, X, Y et Z
   Analogue Triggers Data
02.3      0x00 : Right Trigger
02.4      0x00 : Left Trigger

03     Function Data : 0x80 0x80 0x80 0x80
   Analogue Joysticks Data
03.1      0x80 0x80 : X, Y
03.2      0x80 0x80 : X, Y, second Joystick

Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





f4brice

#40
Très intéressant, ce décortiquage des échanges avec le light-gun !  ^-^

Ma compréhension est qu'en échange d'une grosse (mais temporaire) perte de bande-passante sur le bus (le bus étant occupé pendant toute la durée d'affichage de l'image, et donc libre seulement durant le retour trame), l'électronique du light-gun est simplifiée.

La DC sait très facilement se synchroniser avec le balayage trame.
Lorsqu'une cible est visible, elle active ce que j'appelle le mode "acquisition du spot" du light gun.
Le capteur envoie un "top" milli-poilesque au moment où il voit passer le spot du tube cathodique (pour info, sur ma borne Operation Wolf, je n'ai jamais pu avoir la certitude d'avoir observé ce top avec mon oscillo, il était vraiment noyé dans du bruit. Par contre je l'ai bien vu en aval des étages d'amplification)
Le light gun n'a qu'a amplifier / filtrer ce que mesure le capteur optique.
En mesurant le temps entre le début du mode "acquisition du spot" et le top envoyé par le light-gun, la DC sait quel était le point visé par le gun.

D'un point de vue logiciel / matériel, c'est souvent extrêmement simple de faire ça.
Par exemple, sur Atari ST, le processeur vidéo (appelé "SHIFTER") dispose d'un registre hardware mis à jour en temps réel qui indique en permanance quelle est l'adresse du pixel (dans la RAM vidéo) que le spot est en train d'afficher.
Ainsi, dès que le light-gun envoie son top, il suffit juste de lire ce registre hardware et l'on sait directement quel pixel de l'image est visé par le joueur !

ɐɹqoƆ‾ɥƃᴉH

Citation de: gc339 le Lundi 16 Août 2010, 18:41:28 PM
La vitesse maximale du 18F4550 est de 12 Mips (Horloge 48 MHz, 4 cycles par instruction) donc 12 instructions par µs si je ne me suis pas trompé en lisant son datasheet.
Un changement d'état sur le Maple bus est susceptible de se produire 0,25 µs après le précédent donc le 18F4550 n'aura le temps d'exécuter que 3 instructions basiques !

Le SX28 légèrement overclocké (80 Mhz au lieu de 75) peut tourner à 80 Mips, il aura donc le temps d'exécuter 20 instructions entre chaque changement d'état. Il doit donc être possible de faire du polling ou encore d'utiliser les interruptions en optimisant les routines.


Bon, j'ai eu le temps de me pencher un peu plus sur les micro contrôleurs capables de tourner à une vitesse suffisante et il n'y en a pas tant que ça... Chez Microchip, en 8-bits, rien n'est capable de tourner à plus de 16 MiPS... Donc super dur d'implémenter le truc ^^

En allant voir d'autres solutions (le SX28 comme tu disais par exemple gc339), j'en ai pas trouvé beaucoup... Le SX28 parait etre pas mal, mais me remettre à l'assembleur pour coder ce genre de chose me fait un peu peur :? :? Et en plus, j'ai les platines de développement pour les PIC, va falloir réinvestir pour les SX...

Bref, c'est pas gagné... Fait chier à causer aussi vite cette console  >:D >:D

gc339

#42
Citation de: High_Cobra le Jeudi 26 Août 2010, 11:52:13 AM
Et en plus, j'ai les platines de développement pour les PIC, va falloir réinvestir pour les SX...

Si tes platines de développement sont compatibles avec les PIC de la famille 16C5x®, tu pourras peut être y installer un SX20 ou SX28.
A l'origine les µC SX de Scenix/Parallax/Ubicom ont été conçus pour qu'ils soient compatibles broche à broche avec les PIC de la famille famille 16C5x®, et aussi pour que leur jeu d'instructions soit compatible vers le haut.
Cette information figure dans la version 1.0 du document "Scenix SX18AC/SX20AC/SX28AC user's manual" de 1998, elle a disparu dans les nouvelles versions de ce manuel, probablement à cause des actions en justice intentées par Microchip. On retrouve cependant cette information sur le net.

Citation de: High_Cobra le Jeudi 26 Août 2010, 11:52:13 AM
En allant voir d'autres solutions (le SX28 comme tu disais par exemple gc339), j'en ai pas trouvé beaucoup... Le SX28 parait être pas mal, mais me remettre à l'assembleur pour coder ce genre de chose me fait un peu peur :? :? Et en plus, j'ai les platines de développement pour les PIC, va falloir réinvestir pour les SX...

De toutes façons tu n'auras pas le choix pour désérialiser les données à recevoir. Une fois récupérées sous forme d'octets, de mots de 16 ou 32 bits, les timings sont moins critiques.
Par contre la DC peut s'accommoder d'une vitesse de réception plus basse, il doit alors être possible d'écrire la routine d'émission en C ou autre.

Sinon l'investissement est minime :
L'accessoire le plus important est la SX-Key car connectée sur un port USB de PC elle permet de :

  • Générer l'horloge pour le µC SXxx (entre 2,75 MHz et 100 Mhz)
  • Programmer le µC en place avec le logiciel Sx-Key programming tool.
  • Déboguer au niveau source avec le µC en place.

Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





maldoror68

c'est le wip de l'année après la galaxy force DX là !  :-* ^-^

Iro

Ce topic de fou !!!
J'ai lu sans savoir quoi comprendre :D
Bon courage  ^-
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

gc339

#45
Bonjour.

Bien, j'ai reçu ma rallonge hier Vendredi.


Après avoir cogité pour trouver comment ressortir proprement les fils du Maple bus au milieu de la rallonge, j'ai décidé d'utiliser un capot de connecteur SubD15 avec une barrette de jonction mâle/mâle. Les rebords de la barrette s'insèrent presque dans les rainures qui maintiennent normalement le connecteur subD. Il faut juste fraiser un poil la lèvre de chaque coquille pour que le maintient soit parfait.


Une des coquilles en cours de fraisage sur la petite fraiseuse Proxxon.


Le capot de connecteur SubD15 ouvert, la barrette de jonction, la rallonge dénudée en son milieu et fixée sur une des coquilles.


La modification de la rallonge une fois terminée.

Après avoir vissé les deux coquilles du capot, j'ai dénudé, sur un bon centimètre, les fils d'une alimentation ATX rebutée pour récupérer des morceaux de gaine. J'ai inséré ces morceaux de gaine par dessus les broches de la barrette en respectant le code des couleurs DreamCast.
La 6em broche de la barette est celle du blindage du câble, ce blindage est connecté au 0 volt au niveau du connecteur de l'accessoire, il doit en être de même au niveau du connecteur du port de la DC.


Couleur
|
| Nom du fil



Rouge
|  1
| SDCKA.
Bleu
|  2
| +5 Volts.
Noir
|  3
| GND ou 0 Volt.
Vert
|  4
| Présence accessoire, connecté au 0 volt à l'intérieur de l'accessoire.
Blanc
|  5
| SDCKB.
|  6
| Blindage du câble, connecté au 0 volt.




Les broches 2 et 4 ne sont pas utiles pour la capture des traces et sont par conséquent protégées contre tout court circuit accidentel par recouvrement total du manchon coloré, alors que les autres ne le sont qu'à moitié afin de pouvoir les agripper avec les pinces de l'analyseur Scanalogic.

Avec cette rallonge ainsi modifiée, plus besoin d'ouvrir l'accessoire dont on veut capturer les trames, il suffit d'accrocher les pinces de l'analyseur Scanalogic sur les broches du connecteur central de cette rallonge.
Je vais enfin pouvoir retirer les fils d'accès au Maple bus que j'avais soudés à l'intérieur du Loght Gun Mad Catz !





Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#46


Trames échangée avec une manette standard suite à une réinitialisation de la DreamCast.

La console vient d'être juste réinitialisée avec le bouton de reset, elle sonde ses ports pour savoir s'il y a des accessoires de connectés.
Voici les trames échangées avec une manette standard connectée sur le port B.

Cette manette est équipée :

  • D'un VMU dans le logement n° 1.
  • D'un pack vibreur dans le logement n° 2.





1er échange : la DreamCast interroge le Maple bus du port B



La toute première requête : la DreamCast recherche un dispositif de base sur le Maple bus du port B


La réponse de la manette. Celle ci indique, dans le champ "adresse source" de son message, la présence de 2 dispositifs d'extension.





A noter que maintenant le logiciel du Scanalogic 2 sait décrypter les entêtes (le bloc 0) des trames du Maple bus.

  • Le logiciel sait aussi décrypter le bloc 1 quand les informations qu'il contient sont des types de fonctions.
  • Pour tous les autres blocs, il affiche les 4 octets dans le bon ordre en hexadécimal.
Il suffit d'amener le pointeur de la souris au voisinage ou au-dessus du bloc choisi, le détail s'affiche alors dans la fenêtre texte de gauche.







DC Request
**********
Bloc   Octets
00     0x00   0x40   0x60   0x01
CS     0x21


   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 1 : Device Request
00.2   Destination = 01.1.00000 : Base Device on Port B
00.3   Source = 01.0.00000 : Port B of DC Host
00.4   Data Size = 0

   |   

Device Response
***************
Bloc   Octets
00     0x1C   0x63   0x40   0x05
01     0x01   0x00   0x00   0x00
02     0xFE   0x06   0x0F   0x00
03     0x00   0x00   0x00   0x00
04     0x00   0x00   0x00   0x00
05     0x72   0x44   0x00   0xFF     [Dr]
06     0x63   0x6D   0x61   0x65   [eamc]
07     0x20   0x74   0x73   0x61   [ast ]
08     0x74   0x6E   0x6F   0x43   [cont]
09     0x6C   0x6C   0x6F   0x72   [roll]
10     0x20   0x20   0x72   0x65   [er  ]
11     0x20   0x20   0x20   0x20   [    ]
12     0x20   0x20   0x20   0x20   [    ]
13     0x64   0x6F   0x72   0x50   [Prod]
14     0x64   0x65   0x63   0x75   [uced]
15     0x20   0x79   0x42   0x20   [ By ]
16     0x55   0x20   0x72   0x6F   [or U]
17     0x72   0x65   0x64   0x6E   [nder]
18     0x63   0x69   0x4C   0x20   [ Lic]
19     0x65   0x73   0x6E   0x65   [ense]
20     0x6F   0x72   0x46   0x20   [ Fro]
21     0x45   0x53   0x20   0x6D   [m SE]
22     0x45   0x20   0x41   0x47   [GA E]
23     0x52   0x45   0x54   0x4E   [NTER]
24     0x53   0x49   0x52   0x50   [PRIS]
25     0x4C   0x2C   0x53   0x45   [ES,L]
26     0x20   0x2E   0x44   0x54   [TD. ]
27     0x20   0x20   0x20   0x20   [    ]
28     0x01   0xF4   0x01   0xAE
CS     0x1A


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 5 : Device Status
00.2   Destination = 01.0.00000 : Port B of DC Host
00.3   Source = 01.1.00011 : Base Device on Port B
      Source = 01.1.00011 : Expansion Devices 1 and 2 connected
00.4   Data Size = 28

Device ID
Bloc.Octet
01     Function Type(s) = 0x00 0x00 0x00 00000001b : Only one Function "Controller"
02     Definition Block 1 = 0x00 0x0F 0x06 0xFF : Equipment bitmask for the 1st Function
02.1      11111110b : First joystick, buttons Start, A and B eqquiped
02.2      00000110b : Only buttons X and Y eqquiped
02.3      00001111b : Both triggers and first analogue joystick eqquiped
02.4      00000000b : Unused
03     Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04     Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
Bloc.Octet
05.1   Destination Region = 11111111b : Areas 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Dreamcast controller          "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x01AE = 430 : 43 mA
28.3   Maximun current consuption (little endian) = 0x01F4 = 500 : 50 mA


Avec cette réponse la DC a obtenu des informations essentielles sur la manette :

  • Ses deux logements sont occupés par des accessoires (Expansion Devices).
  • Les zones géographiques avec lesquelles elle est compatible. En fait toutes puisque tous les bits sont à 1.
  • Le masque de présence (Definition Block 1), elle sait alors quels sont les boutons, les manches et les gâchettes qui l'équipent.




2èm échange : la DreamCast interroge la fonction "Controller" de la manette.



La deuxième requête de la DreamCast, elle demande les états ou les positions des boutons, manches et gâchettes de la manette.


La réponse de la manette, celle ci indique toujours, dans le champ "adresse source" de son message, la présence de 2 dispositifs d'extension.








DC Request
**********
00   0x01   0x40   0x60   0x09
01   0x01   0x00   0x00   0x00
CS   0x29


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
00.1   Command Code = 9 : Get Condition
00.2   Destination = 01.1.00000 : Base Device on Port B
00.3   Source = 01.0.00000 : Port B of DC Host
00.4   Data Size = 1

Parameter
01   Function Type(s) = 0x00 0x00 0x00 00000001b : Target is Function "Controller"

   |   

Device Response
***************
00   0x03   0x63   0x40   0x08
01   0x01   0x00   0x00   0x00
02   0000   0000   0xFF   0xFF
03   0x80   0x80   0x80   0x80
CS   0x2A


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
00.1   Command Code = 8 : Data Transfer
00.2   Destination = 01.0.00000 : Port B of Host (DC)
00.3   Source = 01.1.00011 : Base Device on Port B
      Source = 01.1.00011 : Expansion Devices 1 and 2 connected
00.4   Data Size = 3

01   Function Type(s) = 0x00 0x00 0x00 00000001b : Response from Function "Controller"

02   Function Data : 11111111b 11111111b 0x00 0x00
Buttons and Joysticks Data
02.1      11111111b : Right a, Left a, Down a, Up b, Start, A, B et C
02.2      11111111b : Right b, Left b, Down b, Up b, D, X, Y et Z
Analogue Triggers Data
02.3      0x00 : Right Trigger
02.4      0x00 : Left Trigger

03   Function Data : 0x80 0x80 0x80 0x80
Analogue Joysticks Data
03.1      0x80 0x80 : X, Y, First Joystick
03.2      0x80 0x80 : X, Y, Second Joystick


Avec cette dernière réponse, la DreamCast vient d'obtenir de la puce E2 Maple bus à l'intérieur de la manette :

  • L'état instantané des boutons et du manche conventionnel.
  • Les positions actuelles des gâchettes et du manche analogique.
  • L'état/position par défaut des boutons/manches non équipés.
La DC connaît exactement quels sont les boutons, manches et gâchettes qui sont présents sur cette manette, elle a obtenu le masque de présence lors de l'échange précédent.
A l'aide de ce masque de présence, elle peut oblitérer ou ignorer les états ou les positions par défaut de ceux et de celles dont la manette n'est pas équipée.





3èm échange : la DreamCast interroge l'accessoire inséré dans le logement n°1 de la manette, c'est le VMU.



Troisième requête de la DreamCast, elle adresse le dispositif d'extension n° 1 (le VMU) pour obtenir ses caractéristiques.






La réponse du VMU, à noter que :

  • Les accessoires officiels SEGA retransmettent sur le Maple bus par rafales de 4 blocs.
    Tous les clones testés jusqu'à maintenant retransmettaient en continu.
  • Le VMU indique qu'il supporte 3 fonctions : le timer ou horloge, l'affichage LCD ainsi que de la mémoire de stockage.







DC Request
**********
Bloc   Octets
00     0x00   0x40   0x41   0x01
CS     0x00


   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 1 : Device Request
00.2   Destination = 01.0.00001 : Expansion Device 1 on Port B
00.3   Source = 01.0.00000 : Port B of DC Host
00.4   Data Size = 0

   |   

Device Response
***************
Bloc   Octets
00     0x1C   0x41   0x40   0x05
01     0x0E   0x00   0x00   0x00
02     0x40   0x3F   0x7E   0x7E
03     0x00   0x10   0x05   0x00
04     0x00   0x41   0x0F   0x00
05     0x69   0x56   0x00   0xFF     [Vi]
06     0x6C   0x61   0x75   0x73   [sual]
07     0x6D   0x65   0x4D   0x20   [ Mem]
08     0x6F   0x72   0x79   0x20   [ory ]
09     0x20   0x20   0x20   0x20   [    ]
10     0x20   0x20   0x20   0x20   [    ]
11     0x20   0x20   0x20   0x20   [    ]
12     0x20   0x20   0x20   0x20   [    ]
13     0x64   0x6F   0x72   0x50   [Prod]
14     0x64   0x65   0x63   0x75   [uced]
15     0x20   0x79   0x42   0x20   [ By ]
16     0x55   0x20   0x72   0x6F   [or U]
17     0x72   0x65   0x64   0x6E   [nder]
18     0x63   0x69   0x4C   0x20   [ Lic]
19     0x65   0x73   0x6E   0x65   [ense]
20     0x6F   0x72   0x46   0x20   [ Fro]
21     0x45   0x53   0x20   0x6D   [m SE]
22     0x45   0x20   0x41   0x47   [GA E]
23     0x52   0x45   0x54   0x4E   [NTER]
24     0x53   0x49   0x52   0x50   [PRIS]
25     0x4C   0x2C   0x53   0x45   [ES,L]
26     0x20   0x2E   0x44   0x54   [TD. ]
27     0x20   0x20   0x20   0x20   [    ]
28     0x00   0x82   0x00   0x7C
CS     0x13


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 5 : Device Status
00.2   Destination = 01.0.00000 : Port B of DC Host
00.3   Source = 01.0.00001 : Expansion Device 1 on Port B
00.4   Data Size = 28

Device ID
Bloc.Octet
01     Function Type(s) = 0x00 0x00 0x00 00001110b : 3 functions, Timer, LCD display and Storage
02     Definition Block 1 = 0x7E 0x7E 0x3F 0x40 : 1st Function, Timer
02.1      0x7E : no information available about these 4 bytes !
02.2      0x7E : ?
02.3      0x3F : ?
02.4      0x40 : ?
03     Definition Block 2 = 0x00 0x05 0x10 0x00 : 2nd function, LCD display
03.1      0x00 : 1 LCD
03.2      0x05 : 192 bytes per block ((5 + 1) × 32)
03.3      0x10 : 1 access for writing a block
03.4      0x00 : Bit 7 = String of LCD data is horizontal, Bit 6 = Normally black, others reserved
04     Definition Block 3 = 0x00 0x0F 0x41 0x00 : 3rd function, Storage
04.1      0x00 : 1 partition
04.2      0x0F : 512 bytes per block ((15 + 1) × 32)
04.3      0x41 : 4 accesses for writing a block, 1 access for reading a block
04.4      0x00 : Bit 7 = Fixed media, others reserved

Fixed Device Status
Bloc.Octet
05.1   Destination Region = 11111111b : Areas 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Visual Memory                 "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x007C = 124 : 12,4 mA
28.3   Maximun current consuption (little endian) = 0x0082 = 130 : 13 mA

Avec cette réponse la DC sait maintenant que c'est un VMU qui occupe le logement n° 1 de la manette.

  • Les zones géographiques avec lesquelles il est compatible. En fait toutes puisque tous les bits sont à 1.
  • Qu'il supporte 3 fonctions maximum permises : Timer, LCD et Storage.
    Impossible de détailler ici le bloc de définition du Timer car il n'est pas documenté dans le "pdf" de la patente.




4èm échange : la DreamCast interroge l'accessoire inséré dans le logement n°2, c'est le vibreur.




Quatrième requête de la DreamCast, elle adresse le dispositif d'extension n° 2 (le boîtier vibreur) pour obtenir ses caractéristiques.


La réponse du boîtier vibreur, il indique qu'il ne supporte que la fonction vibreur.







DC Request
**********
Bloc   Octets
00     0x00   0x40   0x42   0x01
CS     0x03


   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 1 : Device Request
00.2   Destination = 01.0.00010 : Expansion Device 2 on Port B
00.3   Source = 01.0.00000 : Port B of DC Host
00.4   Data Size = 0

   |   

Device Response
***************
00   0x1C   0x42   0x40   0x05
01   0x00   0x01   0x00   0x00
02   0x00   0x00   0x01   0x01
03   0x00   0x00   0x00   0x00
04   0x00   0x00   0x00   0x00
05   0x75   0x50   0x00   0xFF     [Pu]
06   0x50   0x20   0x75   0x72   [ru P]
07   0x20   0x75   0x72   0x75   [uru ]
08   0x6B   0x63   0x61   0x50   [Pack]
09   0x20   0x20   0x20   0x20   [    ]
10   0x20   0x20   0x20   0x20   [    ]
11   0x20   0x20   0x20   0x20   [    ]
12   0x20   0x20   0x20   0x20   [    ]
13   0x64   0x6F   0x72   0x50   [Prod]
14   0x64   0x65   0x63   0x75   [uced]
15   0x20   0x79   0x42   0x20   [ By ]
16   0x55   0x20   0x72   0x6F   [or U]
17   0x72   0x65   0x64   0x6E   [nder]
18   0x63   0x69   0x4C   0x20   [ Lic]
19   0x65   0x73   0x6E   0x65   [ense]
20   0x6F   0x72   0x46   0x20   [ Fro]
21   0x45   0x53   0x20   0x6D   [m SE]
22   0x45   0x20   0x41   0x47   [GA E]
23   0x52   0x45   0x54   0x4E   [NTER]
24   0x53   0x49   0x52   0x50   [PRIS]
25   0x4C   0x2C   0x53   0x45   [ES,L]
26   0x20   0x2E   0x44   0x54   [TD. ]
27   0x20   0x20   0x20   0x20   [    ]
28   0x06   0x40   0x00   0xC8
CS   0x67


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
00.1   Command Code = 5 : Device Status
00.2   Destination AP = 01.0.00000 : Port C of Host (DC)
00.3   Source AP = 01.0.00010 : Expansion Device n° 2 on Port C
00.4   Data Size = 28

Device ID
01   Function Type(s) = 0x00 0x00 00000001b 0x00b : Only Vibration Pack Function
02   Function Definition Block 1 = 0x00 0x00 00000001b 00000001b : Vibration Pack
02.1      00000001b : ? no information available about this bit !
02.2      00000001b : ? no information available about this bit !
02.3      00000000b : ?
02.4      00000000b : ?
03   Function Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04   Function Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
05.1   Destination Region = 11111111b : Area 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Puru Puru Pack                "
13.1   License) (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x00C8 = 200 : 20 mA
28.3   Maximun current consuption (little endian) = 0x0640 = 1600 : 160 mA

Avec cette réponse la DC sait maintenant que c'est un pack vibreur qui occupe le logement n° 2 de la manette.

  • Les zones géographiques avec lesquelles ce vibreur est compatible. En fait toutes puisque tous les bits sont à 1.
  • Qu'il ne supporte que la fonction "Vibrator Pack" dont il est impossible de détailler ici le bloc de définition car il n'est pas documenté dans le "pdf" de la patente.
  • Que son nom de produit est "Puru Puru Pack", nom beaucoup moins évocateur que celui de "Vibrator Pack".




5èm échange et suivants.




La DreamCast interroge cycliquement la manette, la périodicité est de l'ordre de 16 à 17 ms.

La DreamCast se met à scruter périodiquement la manette pour obtenir :

  • L'état des boutons ainsi que celui du manche conventionnel.
  • La position des gâchettes ainsi que celle du manche analogique.
Les échanges sur le Maple bus sont en tous points identiques au deuxième échange déjà commenté.


Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#47
Je viens de récupérer un Twin Stick, je l'ai aussitôt raccordé sur l'analyseur Scanlogic pour analyser les trames échangées avec la DreamCast.



A noter que j'ai raccourci ma rallonge, le câble utilisé étant de piètre qualité, il déformait trop les signaux en les arrondissant à mon goût.





1er échange : la DreamCast interroge le Twin Stick raccordé sur le port B







La réponse du Twin Stick, avec l'affichage du masque de présence des boutons, des manches et des gâchettes du bloc 2 dans la fenêtre texte de gauche.
A noter que le Twin Stick retransmet lui aussi par salves de 4 blocs.






DC Request
**********
Bloc   Octets
00     0x00   0x40   0x60   0x01
CS     0x21


   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 1 : Device Request
00.2   Destination = 01.1.00000 : Base Device on Port B
00.3   Source = 01.0.00000 : Port B of DC Host
00.4   Data Size = 0

   |   

Device Response
***************
Bloc   Octets
00     0x1C   0x60   0x40   0x05
01     0x01   0x00   0x00   0x00
02     0xFE   0xFE   0x00   0x00
03     0x00   0x00   0x00   0x00
04     0x00   0x00   0x00   0x00
05     0x77   0x54   0x00   0xFF     [Tw]
06     0x53   0x2D   0x6E   0x69   [in-S]
07     0x6B   0x63   0x69   0x74   [tick]
08     0x20   0x20   0x20   0x20   [    ]
09     0x20   0x20   0x20   0x20   [    ]
10     0x20   0x20   0x20   0x20   [    ]
11     0x20   0x20   0x20   0x20   [    ]
12     0x20   0x20   0x20   0x20   [    ]
13     0x64   0x6F   0x72   0x50   [Prod]
14     0x64   0x65   0x63   0x75   [uced]
15     0x20   0x79   0x42   0x20   [ By ]
16     0x55   0x20   0x72   0x6F   [or U]
17     0x72   0x65   0x64   0x6E   [nder]
18     0x63   0x69   0x4C   0x20   [ Lic]
19     0x65   0x73   0x6E   0x65   [ense]
20     0x6F   0x72   0x46   0x20   [ Fro]
21     0x45   0x53   0x20   0x6D   [m SE]
22     0x45   0x20   0x41   0x47   [GA E]
23     0x52   0x45   0x54   0x4E   [NTER]
24     0x53   0x49   0x52   0x50   [PRIS]
25     0x4C   0x2C   0x53   0x45   [ES,L]
26     0x20   0x2E   0x44   0x54   [TD. ]
27     0x20   0x20   0x20   0x20   [    ]
28     0x01   0x2C   0x00   0xDC
CS     0x4C


   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   
   |   

Header
Bloc.Octet
00.1   Command Code = 5 : Device Status
00.2   Destination = 01.0.00000 : Port B of DC Host
00.3   Source = 01.1.00011 : Base Device on Port B
      Source = 01.1.00011 : Expansion Devices 1 and 2 connected
00.4   Data Size = 28

Device ID
Bloc.Octet
01     Function Type(s) = 0x00 0x00 0x00 00000001b : Only one Function "Controller"
02     Definition Block 1 = 0x00 0x00 0xFE 0xFE : Equipment bitmask for the 1st Function
02.1      11111110b : First joystick, buttons Start, A and B eqquiped
02.2      11111110b : Second joystick, buttons D, X and Y eqquiped
02.3      00000000b : No trigger, no analogue joystick
02.4      00000000b : Unused
03     Definition Block 2 = 0x00 0x00 0x00 0x00 : 2nd function does not exist
04     Definition Block 3 = 0x00 0x00 0x00 0x00 : 3rd function does not exist

Fixed Device Status
Bloc.Octet
05.1   Destination Region = 11111111b : Areas 4, 3, 2, 1, Europe, Asia, Japon, North America
05.2   Dummy = 0
05.3   Produc Name (30 Ascii) = "Twin-Stick                    "
13.1   License (60 Ascii) = "Produced By Or Under License From SEGA ENTERPRISES,LTD.     "
28.1   StandBy current consuption (little endian) = 0x00DC = 220 : 22 mA
28.3   Maximun current consuption (little endian) = 0x012C = 300 : 30 mA


Avec cette réponse la DC a obtenu des informations essentielles sur le Twin Stick

  • Son nom de produit : "Twin-Stick".
  • Les zones géographiques avec lesquelles il est compatible. En fait toutes puisque tous les bits sont à 1.
  • Le masque de présence (Definition Block 1), elle sait alors quels sont les boutons, les manches et les gâchettes qui l'équipent.




Bon maintenant, voyons voir à quoi correspondent les boutons du Twin Stick par rapport à une manette Standard.





Le bouton Start :




Bloc 2, Bit 3 du 1er octet = 0, le bouton Start du Twin Stick correspond bien au bouton Start de la manette standard.





Le bouton Pause :



Bloc 2, Bit 3 du 2èm octet = 0, le bouton Pause du Twin Stick correspond au bouton "D" qui n'existe sur aucune autre manette.





Le bouton supérieur du manche de gauche :



Bloc 2, Bit 1 du 2èm octet = 0, le bouton supérieur du manche de gauche correspond au bouton "Y".





La gâchette du manche de gauche :



Bloc 2, Bit 2 du 2èm octet = 0, la gâchette du manche de gauche correspond au bouton "X".





Manche gauche incliné à gauche :



Bloc 2, Bit 2 du quartet supérieur du 1er octet = 0, Le manche de gauche correspond au manche conventionnel de la manette standard.





Le bouton supérieur du manche de droite :



Bloc 2, Bit 1 du 1er octet = 0, le bouton supérieur du manche de droite correspond au bouton "B".





La gâchette du manche de droite :



Bloc 2, Bit 2 du 1er octet = 0, la gâchette du manche de droite correspond au bouton "A".





Manche droit incliné à droite :



Bloc 2, Bit 3 du quartet supérieur du 2èm octet = 0, Ce manche correspond au 2èm manche conventionnel prévu sur la puce E2 Maple bus.




Ben, c'est tout de même mieux que ce que j'avais pu déduire des différentes photos de l'électronique du Twin Stick : http://www.gamoover.net/Forums/index.php?topic=21932.msg322818#msg322818.
Et toutes ces informations obtenues sans ouvrir le Twin Stick, avoir un analyseur comme le Scanalogic 2 c'est vraiement le pied !

Bon, va falloir que je renomme ce WIP en : [WIP] Décorticage manettes HKT 7300 / HKT 7500 / HKT 7700 DreamCast


Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard