Forums "MAME-UNIVERS" > ConsoleCabs

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

<< < (8/15) > >>

gc339:
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.

High_Cobra:
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:

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

--- Fin de citation ---

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

--- Fin de citation ---

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

--- Fin de citation ---

J'espère que tu pourras nous exposer, ici sur gamoover, ce projet au fur et à mesure de son avancement.

gc339:
5) Phases d'initialisation du Twin Stick

Encore faudrait-il que j'en ai un à disposition !

gc339:
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

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique