Phase d’initialisation du 64DD

On revient vers la partie qui m’intéresse le plus, le 64DD mais précisément la détection des jeux disques par les jeux cartouches.

678_1593_1
L’ancien logo et celui utilisé par Nintendo

Les informations contenues dans cette page proviennent de la documentation officielles de la Nintendo 64. Posons le contexte : ceci est une explication de phase d’initialisation du 64DD.

D’après ce que j’ai compris de la documentation, je précise que je ne suis pas développeur pour Nintendo donc cela ne représente que mon interprétation de la documentation.
Donc j’ai compris qu’il existe deux modes fonctionnement du 64DD. Le mode maitre et esclave. Le mode maitre c’est lorsque c’est l’IPLRom du 64DD qui démarre. L’IPLRom du 64DD, c’est l’animation avec le Mario et le N en 3D.

  • S’il n’y a pas de cartouche dans la slot de la Nintendo 64, l’IPLRom se charge et l’animation apparaît. L’IPLRom effectue des vérifications sur le fonctionnement du 64DD et retourne un numéro d’erreur en cas de problème.
  • S’il y a une cartouche, le jeu cartouche démarre, mais si le jeu est un jeu combo alors il comporte une sorte de mini IPLRom inclus. Ce mini IPLRom effectue le diagnostic du 64DD. Mais chose importante, l’IPLrom inclus dans le jeu combo est à la discrétion des développeurs. C’est à dire que si les développeurs de Mario Party européen souhaitent que le jeu combo fonctionne avec un 64DD japonais, il suffit d’enlever la vérification de la zone du 64DD.Voici l’organigramme de la séquence d’initialisation du 64DD, la partie IPLRom d’un jeu combo. (extrait de la documentation)
    316_1Il faut savoir d’abord savoir que toutes les routines du 64DD s’appelle « Leo ». Suite à l’appel à la fonction LeoCJLeoManager(), si le 64DD ne répond pas normalement, le jeu démarre sans faire attention au 64DD.
    Donc F-Zero X jap démarrerait en ignorant le 64DD et Expansion Kit.Si la variable répond « Good », alors le jeu vérifie que l’expansion pak est présent. Pour vérifier la présente de l’expansion pak, on appel la fonction osGetMemSize() :
  • Si la fonction répond : 0x800000, vous avez 8Mb de Ram : expansion pak présent.
  • Si la fonction répond : 0x400000, vous avez 4Mb de Ram : expansion pak absent.
    Dans ce cas, le jeu affiche la fameuse erreur 44. Vous pouvez constater que le texte proposé par Nintendo pour l’erreur 44 est repris à l’identique dans F-Zero X américain et dans Mario Party européen.

471_1507_1

On continue, votre 64DD fonctionne correctement, vous avez le jeu combo, le Ram Pak d’inséré, tout cela en tenant compte des règles de zonage du 64DD. Votre jeu combo, par exemple F-Zero X démarre, s’affiche alors la cinématique d’introduction qui tourne en boucle. Les jeux combo n’attende la lecture du disque 64DD que pendant cinématique d’introduction et/ou l’écran titre. Si vous introduisez un disque 64DD pendant vous êtes à la sélection du championnat dans F-Zero X, la diode du 64DD clignotera, le 64DD stockera son identifiant en RAM mais le jeu l’ignorera.

Qu’est ce qui permet à F-Zero X de reconnaitre F-Zero X Expansion Kit ?
La réponse est simple, il s’agit de l’identifiant, j’en ai déjà parlé, vous devez être au point sur ce sujet. Le jeu est combo est dans une boucle d’attente LeoReadDiskID() qui va lui renvoyer l’identifiant complet du disque. La fonction renvoie une chaine de caractères de 32 octets contenant l’identifiant court : EFZJ. Le jeu N64 sélectionne ce qui l’intéresse dans les 32 octets et compare cela à ce qu’il attend. Si les deux chaines de caractères sont identiques, on passe à l’étape suivante. Cela signifie que l’identifiant du disque attendu et mémorisé dans la rom N64. Par exemple, Mario Party européen (NLBP) s’attend à recevoir ELBE. Je vous invite à relire l’article sur les identifiants N64, étudiez moi ELBE, il y a un truc qui doit vous sauter aux yeux. En fait Mario Party PAL aurait fonctionné avec le disque 64DD de Mario Party Expansion USA. Aussi Zelda OOT JPN et USA peuvent démarrer avec Ura Zelda EZDJ et EZDE. Le zonage numéro 2 serait occupé de faire travail, pour éviter que l’on puisse mettre un Ura Zelda USA avec Zelda OOT JPN.

317_1

Vous avez le jeu désiré dans le slot disquette 64DD, l’identifiant est correct. Je peux ) maintenant de l’adresse LBA (Logical Block Address), suivant le type du disque 64DD, les cases mémoires sur le disque sont différentes. Le jeu a besoin de la case mémoire contenant les données à charger. On charge tout cela en RAM, d’où l’obligation du Ram Pak sinon se serait impossible.

Exemple tout bête de code certainement loin de la vérité mais qui permet de bien comprendre la détection de l’identifiant. F-Zero X lors du chargement d’un disque 64DD, vérification de l’identifiant du disque :

if (id != « EFZJ »)
{
___display error disk;
472_1
}
else
{
___obtain LBA;
___load RAM;
___LeoBootGame();
270_1
}

Cette entrée a été publiée dans 64DD. Bookmarquez ce permalien.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s