Afficher un message
Vieux 04/05/2014, 15h56   #5 (permalink)
Profil
krHACKen
Membre
Ancienneté  20%
Ancienneté 20%
 
Avatar de krHACKen
 
Date d'inscription: juillet 2013
Pays :
Messages: 764
Téléchargements: 0
Uploads: 0
Merci: 215
Remercié 699 fois dans 441 Posts
Par défaut

Ouaip. J'aurais bien aimé dépanner djsteph974 en codant un ptit lanceur, mais vu que je suis sur POPStarter, je n'ai définitivement pas le temps :( .
Pour softmodder ma PSX, j'ai fichu un ELF dans ce genre là dans le flash. Ce ELF a des trucs spécifiques pour la PSX et ne peut pas être lancé sur une PS2.


Pour coder un bon lanceur de disques, il faut :
1) Débloquer le lecteur pour la lecture des DVDV;
2) Identifier le type de disque via sceCdGetDiskType();
3) Si le type de disque renvoyé est SCECdDVDV, lire le secteur 14 via sceCdReadDVDV() et le traiter en tant que disque patché ESR si il contient l'identifiant +NSR à l'offset 37;

4) Si le disque est patché ESR, lancer un ELF de ESR intégré au lanceur ou externe.

5) Si le disque est de type SCECdDVDV, pas patché pour ESR, checker le KELF en MC, un ELF ailleurs, et lancer le DVD Player de la PS2 si rien n'a été trouvé (en reproduisant la procédure adéquate, IOP reset avec rom1:DVDCNF, chargement du pilote erom tout ça tout ça...)

6) Si le disque est de type SCECdPSCD ou SCECdPSCDDA, parser SYSTEM.CNF, assigner le chemin de l'exécutable principal en argument 0 et la version en argument 1, puis exécuter rom0:PS1DRV avec ces deux arguments. Si le disque n'a pas de SYSTEM.CNF, vérifier la présence de PSX.EXE. Si PSX.EXE est présent, le mettre en argument 0.

7) Si le disque est de type SCECdPS2CD, SCECdPS2CDDA ou SCECdPS2DVD, parser SYSTEM.CNF, mettre le chemin du ELF principal en argument 0 et exécuter rom0:PS2LOGO avec cet argument.

8) Si le disque est de type CD-Audio... je ne sais plus quel est l'argument du CdPlayer... Bon disons "rom0:" en argv[0], "BootBrowser" en argv[1], "SkipMc" en argv[2], "SkipHdd" en argv[3] et "SkipForbid" en argv[4], puis exécuter rom0:OSDSYS. Une bonne chose serait de dépacker OSDSYS en mémoire et de patcher ForbidDVDV...
Beaucoup de prise de tête alors qu'on peut tout simplement invoquer ExecOSD();

9) Si le disque est de type illégal ou le lecteur est vide, éjecter le tiroir, mettre le lanceur en attente de fermeture du tiroir et de lecteur prêt, avec un truc genre if(sceCdStatus() != CDVD_STAT_OPEN) sceCdDiskReady(0); puis looper l'identification du type de disque.

Pas besoin de BootCertify vu que OPL a été exécuté après OSDSYS/FMCB qui a fait le job.


Pour coder un lanceur vite fait, isoler et compiler le code de uLE.
Autre lanceur réalisable sans prendre trop de temps, un qui ne fait qu'exécuter rom0:OSDSYS, avec des arguments pour sauter la MC, le HDD et le verrouillage de ReadDVDV.

Une idée de lanceur qui pourra peut être fonctionner mais qui sera aussi basique que pourri :

int main()
{
ExecOSD();

return 1;
}

LOL. Celui là par contre, il lancera FHDB, le HDDOSD ou FMCB si ils sont présents.

Dernière modification par Hamato ; 27/10/2014 à 19h11. Motif: Suppression logique comme demandée
krHACKen est déconnecté   Réponse avec citation