Skyduino:~#
Articles
Corrigé, projet

[Photos + explications] Modding de PS1 … sauce bidouille

Bonjour tout le monde !

Aujourd’hui je vous ai préparé un article un peu spécial, pas de code, juste quelques photos et des explications.

Pour résumer rapidement la situation :
– j’avais une Playstation 1 qui traînait dans un tiroir, j’avais arrêté d’y jouer depuis très longtemps.
– un ami m’a demandé de lui mettre une puce sur sa PS1 pour pouvoir jouer à de vieux jeux gravés (oui c’est pas bien, vile pirate !)
– j’ai fait quelques recherches sur ces fameuses « mod chip », parce que bon, moi le « puçage » de console c’est pas mon activité première …
– voila ce que j’ai trouvé et comment ça a fini, let’s go !

Introduction :

Avant toute chose c’est quoi une « mod chip » ?
Pour faire simple c’est un micro-contrôleur soudé sur la carte mère de la console qui altère à la volée les signaux reçus par le cpu.

Le but final du « puçage » de console de jeu :
– pouvoir jouer à des jeux de n’importe quelle zone géographique
– pouvoir lancer des jeux non officiels (des jeux fait maison par exemple)
et par extension, plus ou moins voulue, pouvoir jouer à des jeux gravés

Étude de l’existant :

Concernant la Playstation 1 je ne dois pas avoir grand chose à dire …
C’est une console de jeu sortie en 1994 par Sony, pas besoin d’en dire plus tout le monde connaît la PS1 !

Et si par malheur vous ne savez pas de quoi je parle wikipedia est votre amis 😉
http://fr.wikipedia.org/wiki/PlayStation

Les puces, aussi appelées « mod chip » pour PS1 sont toutes à 99% basées sur un PIC12C508.
Ce n’est pas une faute de frappe j’ai bien écris 12 C 508, C = mémoire EPROM OTP (One Time Programming) = programmable une seule et unique fois.
Autant dire que si vous ratez la programmation du PIC, c’est cuit il est bon à jeter !

J’ai aussi trouvé des portages pour PIC12F629 et PIC12C607.
Tous étant basés sur le code source (en assembleur) du firmware « MultiMode 3.0 » (abrégé MM3), le super programme qui fait que le zonage des CD et la protection anti-copie devient inefficace …

Les liens des différentes versions que j’ai trouvé :
Version PIC12C508 : je vous laisse chercher sur google 😉
Version PIC12F629 : http://www.gatchan.net/en/2012/08/27/multimode-pour-12f629/
Version PIC12C607 : j’ai pas pu retrouver le lien …

En cherchant bien j’ai aussi trouvé une version « fait maison » en langage C de « UltimateJB » pour PIC18F2455, PIC18F2550, PIC18F4450 et PIC18F4550.
(toute trace du lien vers le code source a disparu … j’ai une copie si besoin)

De même j’ai aussi trouvé une version « fait maison » en langage assembleur pour ATtiny13 nommé « ModAvr » !
http://code.google.com/p/modavr/

Comment ça marche ?

Vous devez finir par me connaître, programmer bêtement un PIC et souder 7 fils à une carte mère c’est pas mon truc.
J’ai donc cherché comment fonctionné le firmware MM3 … et j’ai trouvé !
En fait c’est vraiment tout con … mais les personnes qui ont trouvé le truc ont du chercher un sacré moment.

En gros :
– chaque CD de jeu contient quelque part 4 octets contenant le zonage du CD (il existe pleins de théories sur l’emplacement et l’encodage de ces 4 octets mais rien de concret)
– le cpu de la PS1 s’attend à voir ces 4 octets lors du boot
– s’il ne reçoit pas ces 4 octets ou un mauvais code de zonage la console passe en mode lecteur de musique et byebye le jeu gravé

Le truc :
– le cpu de la PS1 reçoit ces 4 octets « magiques » au moyen d’un port série à 250 bits par seconde
– le signal série passe au travers d’une porte logique NON tri-state (tri-state : LOW, HIGH, HiZ = haute impédance)
– la broche « Output enable » de cette porte logique NON est accessible sur un point de test, de même que la sortie de la dite porte logique

L’astuce :
Envoyez un « 0 » logique dans la broche « Output Enable » de la porte logique et la sortie de cette dernière passera en haute impédance (ce qui équivaux à un fils relié à rien).).

Le contrôleur de CD et le cpu se retrouvent alors électriquement séparé, laissant libre court à toute forme de bidouillage sans que le contrôleur de CD ou le cpu ne se rendent compte de quoi que ce soit.
Ajoutez donc un micro-contrôleur qui injecte un signal série à 250bps sur la sortie de la porte logique, tout en la gardant en haute impédance, je vous laisse deviner le résultat 😉

Concernant le signal série, vous vous dite sûrement que c’est un truc hyper compliqué, etc etc.
Hé ben non ! C’est un signal série tout ce qui à de plus classique, 1 bit de start, 8 bits de données, 2 bits de stop, à 250 bits par seconde (soit 4ms par bit).
Deux petites astuces à connaître cependant : il faut inverser la valeur de chaque bit de données (= XOR 255) et leurs ordres (le bit 0 devient le bit 7, etc …).

Et pour les valeurs de ces 4 octets magique ?
Ça dépend de votre console et de la région où vous l’avez acheté.

Les trois premiers octets sont toujours les mêmes :
(valeur -> signification)
S -> "Sony"
C -> "Computer"
E -> "Entertainment"

Seul le dernier octet change suivant la zone géographique :
A -> "America"
E -> "Europe"
I -> "Inc." (= "Japon")

Si ça c’est pas une invitation au tipiakage je sais pas ce que c’est :)).

Petites astuces supplémentaires utilisés dans le firmware MM3:
– envoyer les 3 séquences possible en boucle jusqu’à ce que le cd ait booté
– détecter le reset et l’ouverture du lecteur de cd (pour ne pas se faire remarquer = mode « furtif »)

Au niveau de différents signaux on retrouve :
– les alimentations VCC (+3v3) et GND
– Clock : le signal d’horloge (facultatif si la puce utilise un oscillateur interne)
– Reset : pour détecter quand envoyer le signal
– Gate : la broche permettant de mettre la sortie de la porte logique NON en HiZ
– Data : la sortie de la porte logique NON
– Door : pour détecter l’ouverture du couvercle du lecteur de CD (facultatif)).

Sources :
Détails techniques sur l’encodage des octets du signal série :
http://members.tripod.com/stelios_cellar/AVR/PSX/mod_chip__Technical.htm

Détails techniques généraux sur les « mod chip » pour PS1 :
http://modchip.aeug.org/faq.html

Mon bricolage :
(ou plutôt mon massacre …)

Ma PS1 démontée (modèle de la série PSX9000) :

P1050689

La carte mère :

P1050692

(que des chipset Sony sans aucun datasheet disponible, en même temps on s’y attend un peu ;))

Test après démontage avec un jeu original :

P1050696

Remarque : ne JAMAIS regarder en direction du CD pendant que la console est allumée !
Sauf si vous voulez devenir aveugle, dans ce cas c’est pas mon problème …

Pour les curieux par nature, voila ce qu’il ne faut pas faire :

P1050699

Super intéressant hein ? Maintenant vous n’aurez pas à regarder ce le CD quoi qu’il arrive.

En parlant du CD :

P1050700

Ce n’est pas un vernis noir mais bleu foncé !
Voila, je viens de pourrir le mythe autours des CD de PS1 🙂

D’un point de vue technique ça sert à rien … juste à faire beau et à ne pas voir les rayures sur le cd.
Officiellement c’est pour pouvoir faire la différence entre un CD pirate et un CD officiel … enfin bon, un CD pirate on le sait quand on en a un entre les mains …

Câblage du jour, bonjour :

P1050706

Fils bleu et violet : Data et Gate
Fils gris, blanc et noir : Reset, Vcc (j’avais plus de fils rouge …) et la masse
Fils jaune et vert : détection de l’ouverture du couvercle à CD et de l’insertion d’une carte mémoire (enfin je crois)

Test sous tension avec un analyseur logique câblé sur chaque fils :

P1050708

Remarque : oui je suis totalement taré !
Oui je risquai de me brûler la rétine au moindre regards en diagonal, oui c’est un transformateur relié au 220v sur la gauche de l’image, oui il n’y a pas de terre sur la PS1.
Donc NON ne faites pas ça chez vous ! À moi de vouloir finir en bacon grillé (et aveugle) …

Premier boot, premier raté :

P1050711

Quand un CD officiel ne boot pas c’est qu’il y a un problème …

P1050712

Et effectivement en reliant la masse du montage ça marche déjà beaucoup mieux …

Premier « mod chip » maison, première boulette :

P1050715

Vous voyez ce magnifiquement fil blanc sur la carte mère ?
Ce fil alimente le CPU en 3v3, car suite à un léger court circuit j’ai cramé une diode quelque part entre l’alimentation et le cpu …

C’est pas encore le plus grave …
J’ai essayé de faire un programme pour ATtiny25/45/85 faisant la même chose que la puce MM3, sauf que entre temps j’ai voulu tester un truc sur le driver du moteur … et je l’ai grillé …
Du coup le cd ne tourne plus (plus de pont en H, plus de moteur …) et le cpu marche bizarrement depuis que j’ai flingué son alimentation 3v3 principale …
Ça donne des glitch audio assez sympa mais c’est pas réellement le but …

Conclusion :

Je sais à peu prés comment fonctionne le système anti-copie de la PS1.
J’ai un code en C pour ATtiny mais je ne sais pas s’il marche (à mon avis non, un code fonctionnel du premier coup ça me parait un peu improbable).
J’ai plus de PS1 (mais ça je m’en fou royalement, je savait que ça allez se finir comme ça :))
Si je trouve une PS1 pour 2-3€ sur ebay (pas plus :)) j’essayerai de tester mon « mod chip » fait maison.

Au final j’ai pris un PIC12F508 (F pas C, ça marche exactement pareil. D’un point de vue hardware c’est le même micro-contrôleur à part pour le type de mémoire EPROM -> Flash) sur farnell.
J’ai programmé le firmware « MultiMod 3.0 » et j’ai fait un petit montage avec un support DIP pour pouvoir le démonter facilement.

J’ai ensuite entrepris de monter la puce sur la console de mon pote en suivant les notices d’origines.
J’ai ouvert le boîtier (c’est une PS1 série PSX5000) et …

P1060011

Tient … une « mod chip » … montage 3 fils, firmware « Old Crow » (bien plus vieux que le firmware MM3) …
Sur le coup ça fait un peu foutage de gueule mais bon …
Bref, j’ai installé la nouvelle « mod chip » avec un montage 7 fils (montage 100% furtif), test avec un CD gravé -> réussite, test avec un CD officiel -> réussite.

« I’m making a note here: huge success »

Discussion

6 réflexions sur “[Photos + explications] Modding de PS1 … sauce bidouille

  1. Très intéressant comme article, SONY a du passer pas mal de temps à concevoir la protection.
    Juste une remarque, le PIC12C607 cité au début de l’article n’existe pas sur le site microchip, une erreur de frappe ?

    Publié par NETeagle | 20 janvier 2013, 16 h 06 min
    • >> Juste une remarque, le PIC12C607 cité au début de l’article n’existe pas sur le site microchip, une erreur de frappe ?

      Justement non, c’est bien « PIC12C607 », je trouve plein de lien de forum qui en parle, mais plus le lien avec le .hex.
      J’avais même pas fait gaffe qu’il n’était pas référencé sur le site de Microchip …

      Publié par skywodd | 20 janvier 2013, 16 h 24 min
  2. ca me donne grave envie de chercher une PS1 sur LBC aussi et de faire mon propre modchip.

    Je kiffe ce reverse engineering :love:

    Publié par blakk-olifant (@blakkolifant) | 20 janvier 2013, 16 h 07 min
  3. bonjour,

    je suis la personne qui a fait le portage sur 18Fxxxx apres un long moment d’absense, je me relance dans l’aventure. le soft a été ecri pour fonctionner sur le SPIFlasher de la xbox 360 ( a l’epoque du hack JTAG ) et je voulais recycler les PCB que j’avais fabriquer pour en faire d’autres choses .

    d’ailleur il ne s’appeller pas ultimateJB ( c’était pour la PS3 ) mais ultimatepsone.

    on en retrouve la trace un petit peu sur le net et une video sur youtube .

    Publié par remy | 17 novembre 2016, 14 h 38 min

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.