Aller au contenu

BIOS Gamecube


Invité Invité

Messages recommandés

Invité Invité

Slt j'ai trouver un petit truc concernent le bios Gamecube.

 

http://debugmo.de/gc/gc.html

 

voici déja la traduction française mais ç'est tres dur a comprendre

mais si vous pouvez m'aider.

 

L'incorporation d'exemple est un dispositif pour jouer des jeux. Elle se compose d'une unité centrale de traitement PowerPC-basée forte avec quelques prolongements de propriété industrielle, un noyau de propriété industrielle de GPU/Peripheral (appelé la "nageoire&quot, y compris un processeur 3D puissant, 24MB de 1T-SRAM, une mini-DVD unité de disques, plusieurs interfaces externes.

 

L'exemple est censé pour être seulement employé avec les jeux originaux, et a ainsi une protection que la botte est seulement possible à partir des disques protégés par copie. Cependant, un jeu appelé l'"étoile de Phantasy en ligne" a contenu une possibilité pour exploiter les jeux se relient à l'Internet, de ce fait permettant au code d'être injecté et exécuté (http://www.gdev.com) - la scène de homebrew avait commencé !

 

Le problème est que le processus de botte avec PSO vous prend très longtemps chaque fois veulent essayer quelque chose, environ 1-2 minutes - vraiment pour ne pas se perfectionner pour un cycle de développement gentil. Pour surmonter ceci, j'ai développé un remplacement de bios (ou bootrom, car or9 indiquerait), que je veux présenter ici.

 

DéNI

L'information présentée ici ne sont basées sur mon avis qu'ils aucune pas coupure aucune loi, règles ou quoi que. Si elles , contacter veuillez moi à gc@_n0spam_debugmo.de (enlevez le n0spam) et moi enlèvera la substance IMMéDIATEMENT.

 

DéNI 2

N'importe quelles informations ici lui sont fournies "comme-". Je ne prends aucune garantie pour n'importe quoi ici, particulièrement si vous vous cassez dispositif que vous êtes tout seul. Veuillez ne pas m'expédier au sujet des connecteurs cassés, des goupilles cassées ou des dispositifs "simplement" non-travaillants. Dans le doute, ne modifiez pas votre dispositif si vous n'avez pas encore à jouer avec.

 

DéNI 3

Au sujet de la piraterie - VEUILLEZ pas . Ce n'est pas au sujet de la piraterie. Il ne vous aidera pas si vous voulez lire les disques non-originaux de jeu, et je suis heureux silencieux au sujet du fait que la protection de copie réelle semble être faite dans les progiciels des dvdrom. Ce projet est au sujet du développement, des démonstrations et de la substance de HOMEBREW. Pas au sujet de jouer les jeux copiés. La piraterie tuera la scène entière le jour où vous pouvez rejeter le warez sans avoir un BBA ou devez rejeter PSO chaque fois. Si ceci se produira, l'intérêt commercial pour le warez se développera, et le nintendo devra prendre des guerres légales contre tout le monde qui évite le processus ordinaire de botte. Veuillez NE PAS LAISSER CECI SE PRODUIRE. NE SOUTENEZ PAS WAREZ, autrement nous bientôt devons rechercher une autre console pour entailler.

 

Comme j'ai expliqué dans ce poteau de forum de dextrose je suis parvenu lui pour programmer un CPLD pour remplacer le contenu du chargement initial, ou BIOS, ou bootrom. La pièce de matériel se compose :

 

* un CPLD, j'ai employé un Xilinx XCR3064XL, relié entre le morceau de chargement initial et la nageoire,

* une action rejouent la carte de mémoire, ou n'importe quel flash compatible de SPI. Notez que je pas obtenu un flash d'atmel ai travaillé puisqu'il se fonde sur avoir l'horloge au niveau positif tandis que le CS est inactif (c.-à-d. haut). Une carte de mémoire normale et compatible ne fonctionnerait pas parce qu'ils ont besoin d'un ordre ouvrant spécial qui n'a pas été renversé encore (enfin pas l'en public).

 

Quand le chargement initial est lu du morceau de chargement initial, les CPLD injectent un petit bloc de code. Le code sera lu à 0x81300000, le point d'entrée du chargement initial normal. Quand le code est exécuté, il charge le premier secteur de la carte de mémoire dans la fente b à 0x81000000 et saute là. Les regards de code en tant que ce qui suit :

 

le long 0x52000000 # bien qu'être code, il soit presque

un ineffectif # ceci est l'adresse de secteur envoyée aux lis r27,

0xcc00 # base de carte de mémoire de charge des registres internes #

car la batte sont déjà initialisées par BS, nous # ajoutent

0xC0000000 au Li r28, 0x0880 # morceau de la base 0x0C000000. choisi

dessus pour la fente de memcard, le mflr à vitesse réduite r29 # lr

contient toujours l'adresse de ce code - c.-à-d. 0x81300000 le Li

r30, 128 # transfert le Li r31, 7 de 128 bytes # EXI DMA écrivent le

do_dma de bl # font DMA, et attendent les lis r29, 0x8100 de fin #

maintenant lu à 0x81000000, encore le Li r31 de 128 bytes, 3 #

EXI DMA ont lu le mtlr r29 # ont placé l'adresse à sauter au do_dma

: stmw r28, 0x6814(r27) # write_wait initié de DMA : lmz

r5, 0x6820(r27) # rlwinm de byte de statut lu. 0, 5, 31, 31 #

write_wait # attente de bne de peu "dans transfert" d'extrait jusqu'au

blr dégagé # à la branche arrières/au code

 

Ce code peut regarder un peu confondant au début, mais il a dû être aussi petit que ceci, autrement il ne se serait pas adapté dans le CPLD.

 

Le code s'envoie dehors à l'EXI. que les bytes envoyés sont ainsi "52 00 00 00 3f......", 128 bytes au total. Mémoire carte prévoit un commande byte, qui est 0x52 dans ce cas après ce, il prévoit adresse, 00 00 00 3f dans ce cas-ci, qui est le premier secteur, excentré 0x3F. puis il prévoit 4 factice byte, et commence envoyant donnée byte ensuite qui après qu'il atteigne l'extrémité du secteur (128 bytes + 6 bytes spéciaux pour ECC, mais nous pouvons les employer aussi bien), il commence à répéter le secteur. Ainsi après rédaction de 128 bytes nous pouvons lire 128 bytes de charge utile dans la mémoire. Un programme spécial brouillera les données autour de sorte qu'après que 128 bytes de données les premières données de notre charge utile aimée sorte, et obtienne lu dans la mémoire. Après que nous ayons fini l'exi a lu DMA, nous sautent là.

C'était le chargeur-amorce de la première étape. Maintenant le premier secteur de la carte de mémoire contient 128+6 bytes d'un chargeur-amorce de la deuxième étape, qui lit les secteurs restants de la carte dans le mem et saute là. Nous ne pourrions pas faire ceci du commencement en raison du manque de l'espace dans le CPLD. le 2ème chargeur-amorce d'étape que j'ai écrit des ajustements exactement dans 128bytes, mais pouvons être optimisés probablement un peu plus loin. je ne m'inquiète pas, puisqu'il des ajustements.

 

Maintenant nous pouvons charger jusqu'(presque) à 512k de code d'utilisateur dans la mémoire, de ce fait écrivant notre propre remplacement de chargement initial. J'ai commencé à faire cela, mais il manque toujours des fonctions importantes, mais peut être employé pour télécharger DOLs (employant le réseau) et pour les exécuter (laissant rejeter le homebrew dans une question des secondes), et commence des jeux (employant un petit apploader).

 

L'outil de mc.c :

Cet outil préparera une action rejouent la carte pour notre chargeur-amorce. Le programme est fait pour le linux sur un PC, de ce fait ayant besoin d'une interface à la carte de mémoire. J'ai établi le rapport suivant au printerport :

 

Borne 3 D1 - PUBLICATION PéRIODIQUE DANS (à la carte) 4

D2 - MORCEAU (à la carte) 5 D3 CHOISIS - CLK (à la carte) 10 ACK -

PUBLICATION PéRIODIQUE HORS (de la carte) 25 DE LA terre - la TERRE

3.3v - carte VCC

 

Pour le pinout de la carte de mémoire, jetez un coup d'oeil à http://members.shaw.ca/cheezWhizzer/GCNCard.htm.

Vous pourriez mettre en communication l'auteur de carte de mémoire à courir sur l'incorporation d'exemple, mais je recommande vivement d'utiliser un PC, parce que vous pouvez le reprogrammer beaucoup plus rapidement. Notez que vous ne devriez pas essayer d'obtenir le 3.3v du port parallèle - cela ne fonctionnera pas. Faites attention, si vous avez un vieux PC, les niveaux au port parallèle pourrait être toujours 5v. Utilisez les amortisseurs ou un plus nouveau PC (avec niveaux 3.3v) alors.

 

Vous devez appeler le /mc avec un dossier binaire comme argument. Ce doit être un dossier lié à 0x81000080, avec le point d'entrée au début. Mon fichier makefile produira un dossier appelé le "main_boot.bin", qui convient à ceci. Faites attention que le nombre de pages utilisées n'excède pas le nombre de pages lues dans la mémoire par le chargeur-amorce de la deuxième étape. Vous pouvez increse elles comme vous voudrez.

 

Le remplacement de chargement initial

Mon remplacement de chargement initial est encore lointain loin d'être parfait. Cependant, il déjà appuis :

 

* L'initialisation de la plupart de matériel partie, comme la garniture, dvd...

* intialisation de lowmem

* Téléchargement de DOLs (jusqu'à 4MB ou ainsi) et de casiers (chargés à 0x80003000) sur le port 4000

* chargement de A"-bouton de jeux (pression&quot

 

Notez que vous devez ajuster les adresses d'IP directement dans le code. Jetez un coup d'oeil dans "network.c". Ainsi il est presque quelque chose que vous avez besoin pour un cycle de développement rapide.

 

TéLéCHARGEMENTS

Le remplacement de chargement initial, y compris l'outil mc.c d'auteur de carte de mémoire.

Le code de CPLD, utilisable pour Xilinx ISE (WebPack le fera).

 

Images

(l'information de soudure détaillée suivra)

Le ROM/RTC/...

La SERIAL_OUT-garniture

L'action rejouent le raccordement de carte de mémoire

L'action rejouent la carte de mémoire avec le connecteur de PC

Le CPLD devant l'incorporation d'exemple

Premier screenshot de mon remplacement de chargement initial - oui, très laid.

 

 

Merci d'avance.

 

@+

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
  • Statistiques des membres

    23 028
    Total des membres
    1 033
    Maximum en ligne
    Subaru
    Membre le plus récent
    Subaru
    Inscription
  • Statistiques des forums

    128,1 k
    Total des sujets
    1,7 M
    Total des messages
×
×
  • Créer...