Jump to content

ModChip France

Le kit Xecuter SX Pro va vous permettre de lancer le MODE RCM de la console, une licence pour le CFW à installer sur la console. Pas besoin d'ouvrir la console Nintendo Switch ni besoin de souder. Vous pourrez ainsi avec ce pack, lancer vos copies de jeux Nintendo Switch.
Acheter Maintenant

Jeux-Linker France

Xecuter SX Pro OS de la Team Xecuter vous permet de modifier votre Nintendo Switch, vous pouvez profiter des custom firmwares sur toutes les versions de la Switch et il est région free. Pré commander ce linker sur leur site, paypal supporté !
Acheter Maintenant

L'exploit 6.72 disponible : faut-il faire la mise à jour ou pas ?

Le voila le tant attendu le nouveau firmware de la PS4 qui vous servira à hacker votre console et celui-ci passe de la version 5.05 à la version 6.72 qui vient cette fois-ci d'un membre pas connu de la scène. Eh oui, celui-ci ne vient pas de SpecterDev ou TheFlow mais cella vient d'un membre nommé sleirsgoevy qui remercie fièrement Fire30 pour le WebKit exploit, TheFlow pour l'exploit kernel et ainsi quei Ueyama et shinh pour le compiler 8cc.
 
L'exploit est en stade "instable" car il vous faut le relancer à plusieurs reprise pour y arrivé, ci-dessous, un petit readme laissé par l'auteur afin de vous aider au lancement de l'exploit :
La page de l'exploit proposée sur le site Modconsoles a subit une traduction de la langue Anglais vers le Français, un ajout du bouton NETCAT pour les envois des payloads depuis l'externe et aussi, une refonte de la page en couleur proposée par un membre depuis le Github officiel du Jailbreak.
Si vous possédez une PS4 sous le firmware 6.72, alors cliquer sur le lien ci-dessous pour profiter de l'exploit :
http://ps4webkit.modconsoles.fr

En cours d'hébergement...
 
******* Il est temps de passé du 5.05 en 6.72 ou pas ? *******
Alors la réponse est NON, pourquoi ? Parce que l'exploit pour le moment est très instable. Il vous faut relancé l'exploit au moins 10x pour le voir se lancer. Les jeux 5.05 ne fonctionne pas pleinement sous ce firmware, des beugs ou des arrêt brusque de la console en plein jeu peuvent subvenir pendant votre partie. Aucun backup à ce jour n'est encore disponible sous ce firmware et même si vous arrivé à dumper votre jeu, il faudra que PS4 PKG Tools puisse se mettre à jour afin d'inclure les nouveaux clé du firmware 6.72 (à confirmé) Al-Azif a mis à jour ses payloads afin de supporté pleinement le firmware 6.72 : ps4-payload-repo Le cache du navigateur n'étant pas encore fonctionnel mais cella ne tardera pas pour ce week-end avec l'arrivé d'autre nouveauté comme promis par Al-Azif  
Read more...

La Team Xecuter publie SX OS en v3.0.4b

Le nouveau firmware de la Nintendo Switch sortie depuis quelques jours force la Team Xecuter à pouvoir mettre à jour leur cfw SX OS afin de supporté ce firmware ainsi que réglé quelques beugs qu'il ont découvert.

********** Changelog : **********

Read more...

Luma3DS se met à jour en v10.2

 
Le meilleur et l'unique CFW de la 3DS de son nom Luma3DS vient d'être mise à jour vers la v10.2, les nouveautés sont énorme en commençant par la fonction de capture d'écran qui a reçu une accélération massive. La vitesse de capture est passé de dix secondes en quelques millisecondes et elles sont enregistrées dans "/luma/screenshots/".
Vous pouvez désormais régler la luminosité de l'écran de manière beaucoup plus précise qu'avec les paramètres officiels depuis le menu Rosalina. Vous trouverez également des filtres d'écran supplémentaires, en plus la gestion du menu Rosalina a également été simplifiée et prend en charge le C-Stick pour les N3DS.
Les retards et les plantages avec l'InputRedirection devraient maintenant appartenir au passé ; cependant, il peut arriver que certaines touches du menu HOME soient actionnées deux fois. Appuyez sur "ZL" ou "ZR" pour régler ce problème.
********* Changelog complet : *********
 

Read more...

Solution des Nintendo Switch bloqué au logo "JoyCon" avec SX Core

Depuis l'arrivé des puces SX Core/Lite, les problèmes ne manquent pas pour nous utilisateurs et poseurs de puce. De plus de ne pas utilisé les homebrews ChoiDuJourNX ou Hetake, voila que d'autres personnes se retrouvent coincé sur le logo des "Joycon" après installation de la puce SX Core. La Team SX a fait des recherches dessus et ont pu trouvé la cause de se beug.

**************** Citation : ****************
Les condensateurs en question doivent être solides et intacts, comme sur la photo ci-dessous et ces deux condensateurs sont situés au même endroit sur les cartes mères (v1) "erista" et (v2) "mariko".

En ressoudant ces deux condensateurs ou en les remplaçant par une pièce similaire de type CMS 0.1uf 10v 0201, vous éviterez de vous retrouver bloqué par le logo "JoyCon". Il est recommandé de faire appel à un installateur professionnel si vous n'avez pas les outils nécessaires pour terminer l'installation de SX Core avec succès.
Read more...

SX OS v3.0.3b et un flasheur des SX Core/Lite disponible

La Team SX revient en force pour corrigé des erreurs qui se sont introduit dans les versions 3.0.1/3.0.2 de leur cfw SX à destination des Switch Mariko/Lite profitant des puces SX Core et Lite.

"Nous sommes de retour avec une mise à jour mineure (mais importante !) pour SX OS, ainsi qu'un utilitaire pour PC permettant de mettre à jour votre micrologiciel SX Core/Lite via USB. Ce dernier est nécessaire pour les personnes qui utilisent des outils qui n'ont pas été conçus pour leur console Switch. Un exemple est le populaire "ChoiDuJourNX", que les gens utilisent pour mettre à jour/réduire le firmware de leur console. Cet outil a été conçu pour les consoles classiques Erista/RCM, et est donc dangereux à utiliser sur les consoles Mariko."
Changelog officiel :
Téléchargement

Logiciel Windows pour mettre à jour votre SX Core / Lite

Read more...
Sign in to follow this  
Red-j

Code source commenté de Cobra Installer 7.50

Recommended Posts

Apprendre en lisant le code des autres est très instructif permet de voir les procéder et les façons de faire de chacun, mes codes sont loin d'être parfait mais ils font leur boulot ;)

Je vous partage aujourd’hui le code source complet de mon homebrew Cobra installer réaliser avec la librairie SDL pour PS3.

Fonction de l'homebrew installer/restaurer les fichiers payload cobra 7.50 sur firmware 4.81

in-ps3-cobra-750-installer-habib-1.jpg

Il est commenté un maximum pour que vous puissiez réutiliser des parties de codes si besoins :)

Partie intéressantes évoquées dans ce code: appels des fonctions syscalls, écriture sur le dev_flash(danger), copie de fichiers,check firmware,check type de console,backup/restauration de fichiers,utilisation de SDL pour gérer la partie graphique.

Il se compile avec PSDK3v2 de Estwald et nécessite le ficher psn_package_npdrm.exe (non fourni car copyright)

Pack de l'homebrew: http://rgho.st/7yWj6TZT9

 

main.cpp:

/*
 * ----------------------------------------------------------------------------
 * "LICENCE BEERWARE" (Révision 42):
 * Red-J a créé ce fichier. Tant que vous conservez cet avertissement,
 * vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
 * que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
 * retour.
  	__________           .___             ____.
   	\______   \ ____   __| _/            |    |
	|       _// __ \ / __ |   ______     |    |
	|    |   \  ___// /_/ |  /_____/ /\__|    |
	|____|_  /\___  >____ |          \________|
   		\/     \/     \/                    
 * ----------------------------------------------------------------------------
 */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

#include <ppu-lv2.h>
#include <io/pad.h>
#include <fcntl.h>
#include <sys/file.h>
#include <sysutil/msg.h>
#include <sysutil/sysutil.h>

#include "copy.h"
#include "syscalls.h"
#include <SDL/SDL.h>
#include <SDL/SDL_timer.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <io/pad.h>



#define SUCCESS 0
#define FAILED -1

#define SC_SYS_POWER 					(379)
#define SYS_REBOOT				 		0x8201


#define	MENU 	"/dev_hdd0/game/COBJ75011/USRDIR/menu.bmp"


int sys_get_version(u32 *version)
{
	lv2syscall2(8, 0x7000, (u64) version);//////////////////////////////////////////
	return_to_user_prog(int);
}
s32 lv2_get_target_type(u64 *type)
{
	lv2syscall1(985, (u64) type);
	return_to_user_prog(s32);
}

s32 main(s32 argc, char* argv[])
{ 
	u64 type;
	lv2_get_target_type(&type);

    char version= 0;
	char version2= 0;
	char version3=0;
	

    FILE *f = fopen("/dev_flash/vsh/etc/version.txt", "r");
	
	fseek(f, 9, SEEK_SET);
	fscanf(f, "%c", &version);
	fseek(f, 11, SEEK_SET);
	fscanf(f, "%c", &version2);
	fseek(f, 12, SEEK_SET);
	fscanf(f, "%c", &version3);
	

		
	padInfo2 joypadInfo;    //initialisation des parametres de la manette
	padData joypadData;
	ioPadInit(7);       
	
	
  ////////////////////////////////////////////
 //           Partie graphique			   //
////////////////////////////////////////////
	SDL_Surface *ecran = NULL,*imagedefond = NULL,*imagedefond2 = NULL,*imagedefond3 = NULL,*aboutfnd = NULL,*about = NULL,*about2 = NULL,*about3 = NULL,*about4 = NULL,*about5 = NULL,*about6 = NULL,*aboutls = NULL,*TITLE = NULL,*texteUse = NULL,*texteUse2 = NULL,*ttype = NULL,*texteCROSS1 = NULL,*texteSQUARE1 = NULL,*texteCIRCLE1 = NULL,*texteTRIANGLE1 = NULL,*texteLR = NULL,*texteLR2 = NULL,*CROSS1 = NULL,*SQUARE1 = NULL,*CIRCLE1 = NULL,*TRIANGLE1 = NULL,*LR = NULL;
	 /* initialisation des variables SDL à 0*/
	
	SDL_Rect position;
	
	TTF_Font *font = NULL;	// déclaration de la variable police de caractère 1
	TTF_Font *font2 = NULL;	// déclaration de la variable police de caractère 2
	SDL_Color colorwhite = { 255, 255, 255}; // déclaration de la variable couleur blanche SDL
	SDL_Color colorred = { 255, 0, 0}; // déclaration de la variable couleur rouge SDL
	//SDL_Color colorblue = { 0, 0, 255}; // déclaration de la variable couleur bleue SDL
    SDL_Init( SDL_INIT_EVERYTHING );// déclaration et Initialisation de la SDL principal
	TTF_Init();// déclaration et Initialisation de la SDL ttf
	ecran = SDL_SetVideoMode(1200,700,32,SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); //1200 ok
//ecran = SDL_SetVideoMode(1024, 720, 32, SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); 	// definition de la resolution 
    imagedefond = SDL_LoadBMP(MENU);// déclaration de la variable imagedefond
	imagedefond2 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/menu2.bmp");
	imagedefond3 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/menu3.bmp");
	aboutfnd = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/about.bmp");
	CROSS1 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/CROSS.bmp");// déclaration de la variable CROSS1
	SQUARE1 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/SQUARE.bmp");// déclaration de la variable SQUARE1
	CIRCLE1 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/CIRCLE.bmp");// déclaration de la variable CIRCLE1
	TRIANGLE1 = SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/TRIANGLE.bmp");// déclaration de la variable TRIANGLE1
	LR= SDL_LoadBMP("/dev_hdd0/game/COBJ75011/USRDIR/LR.bmp");
	font = TTF_OpenFont("/dev_hdd0/game/COBJ75011/USRDIR/PS3.TTF", 24);// déclaration de la variable police de caractère "font" et de sa taille
	font2 = TTF_OpenFont("/dev_hdd0/game/COBJ75011/USRDIR/PS3.TTF", 32);// déclaration de la variable police de caractère "font2" et de sa taille
	
	////////////TYPE DE CONSOLE//////
	if(type==1)
		{
		
		ttype = TTF_RenderText_Blended(font, " FW: CEx", colorwhite);
		}
	else if(type==2)
		{
		
		ttype = TTF_RenderText_Blended(font, " FW: DEx", colorwhite);
		}
	else
		{
		
		ttype = TTF_RenderText_Blended(font, " FW: DECR", colorwhite);
		}

	//////////////////////////////////////////////////////////////////
	
	TITLE = TTF_RenderText_Blended(font2, "COBRA INStALLER 7.50 HABIB", colorwhite);// déclaration de la variable TITLE
	texteCROSS1 = TTF_RenderText_Blended(font, "INStALLER LES FICHIERS", colorwhite);// déclaration de la variable texteCROSS1
	texteSQUARE1 = TTF_RenderText_Blended(font, "REStAURER LES FICHIERS", colorwhite);// déclaration de la variable texteSQUARE1
	texteTRIANGLE1 = TTF_RenderText_Blended(font, "ABOUt", colorwhite);// déclaration de la variable texteTRIANGLE1
	texteCIRCLE1 = TTF_RenderText_Blended(font, "QUIttER", colorwhite);// déclaration de la variable texteCIRCLE1
	texteLR = TTF_RenderText_Blended(font, "CHANGER BACkGROUND", colorwhite);
	texteLR2 = TTF_RenderText_Blended(font, "RETOUR", colorwhite);
	texteUse = TTF_RenderText_Blended(font, "FIRMWARE rEBUG 4.81 UNIQUEMENt!!!", colorwhite);// déclaration de la variable texteUse
	//texteUse2 = TTF_RenderText_Blended(font, "'custom' sur votre clef USB", colorwhite);// déclaration de la variable texteUse
	about = TTF_RenderText_Blended(font2, "ABOUt", colorwhite);// déclaration de la variable texteUse
	about2 = TTF_RenderText_Blended(font, "HOMEBREW CREE AVEC PSL1GHt V2", colorwhite);// déclaration de la variable texteUse
	about3 = TTF_RenderText_Blended(font, "REMERCIEMENtS AUx MEMBRES QUI FONt ", colorwhite);// déclaration de la variable texteUse
	about4 = TTF_RenderText_Blended(font, "BOUGER LA SCENE PS3 AINSI QUE COOL72 ", colorwhite);// déclaration de la variable texteUse
	about5 = TTF_RenderText_Blended(font, "0_obeWAN BIQUET Et BIEN D'AUtRES", colorwhite);// déclaration de la variable texteUse
	about6 = TTF_RenderText_Blended(font, "LA SEULE LIMItE DU DEv ESt L'IMAGINAtION...", colorwhite);// déclaration de la variable texteUse
	aboutls = TTF_RenderText_Blended(font, "WWW.LOGIC-SUNRISE.COM", colorwhite);// déclaration de la variable texteUse
	
	
	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); 
// boucle de contrôle des actions de la manette


        position.x = 0;  //position horizontale de imagedefond
		position.y = 0; //position verticale de imagedefond
		SDL_BlitSurface(imagedefond, NULL, ecran, &position); 

		//usleep(200);

		position.x = 160; //position horizontale de	TITLE	
        position.y = 20; //position verticale de TITLE
		SDL_BlitSurface(TITLE, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		////////
		position.x = 50; //position horizontale de	type	
        position.y = 100; //position verticale de type
		SDL_BlitSurface(ttype, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		
		position.x = 200; //position horizontale de	texteUse						///////////////////		
        position.y = 440; //position verticale de texteUse
		SDL_BlitSurface(texteUse, NULL, ecran, &position); //transfert de la surface de texteUse sur la surface ecran
		
		position.x = 140; //position horizontale de	texteUse2								
        position.y = 480; //position verticale de texteUse2
		SDL_BlitSurface(texteUse2, NULL, ecran, &position); //transfert de la surface de texteUse2 sur la surface ecran
		
        position.x = 50; //position horizontale de CROSS1
        position.y = 570; //position verticale de CROSS1
		SDL_BlitSurface(CROSS1, NULL, ecran, &position);  //transfert de la surface de CROSS1 sur la surface ecran
        
		position.x = 100; //position horizontale de	texteCROSS1								
        position.y = 580; //position verticale de texteCROSS1
		SDL_BlitSurface(texteCROSS1, NULL, ecran, &position); //transfert de la surface de texteCROSS1 sur la surface ecran
		
		
		position.x = 110; //position horizontale de SQUARE1
		position.y = 610; //position verticale de SQUARE1
		SDL_BlitSurface(SQUARE1, NULL, ecran, &position); //transfert de la surface de SQUARE1 sur la surface ecran
        
		position.x = 160; //position horizontale de texteSQUARE1
		position.y = 620; //position verticale de texteSQUARE1
		SDL_BlitSurface(texteSQUARE1, NULL, ecran, &position); //transfert de la surface de texteSQUARE1 sur la surface ecran
		
		
        position.x = 900; //position horizontale de CIRCLE1
		position.y = 570; //position verticale de CIRCLE1
		SDL_BlitSurface(CIRCLE1, NULL, ecran, &position); //transfert de la surface de CIRCLE1 sur la surface ecran
        
		
		position.x = 950; //position horizontale de texteCIRCLE1
        position.y = 580; //position verticale de texteCIRCLE1
		SDL_BlitSurface(texteCIRCLE1, NULL, ecran, &position); //transfert de la surface de texteCIRCLE1 sur la surface ecran
		
		
        position.x = 840; //position horizontale de TRIANGLE1
		position.y = 610; //position verticale de TRIANGLE1
		SDL_BlitSurface(TRIANGLE1, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 900; //position horizontale de texteTRIANGLE1
		position.y = 620; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteTRIANGLE1, NULL, ecran, &position); //transfert de la surface de texteTRIANGLE1 sur la surface ecran
		
		position.x = 260; //position horizontale de	texteCROSS1								
        position.y = 655; //position verticale de texteCROSS1
		SDL_BlitSurface(LR, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 420; //position horizontale de texteTRIANGLE1
		position.y = 665; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteLR, NULL, ecran, &position);
		
        SDL_Flip(ecran);
		

	
		int manette=1;


   
  ////////////////////////////////////////////////////////
 //           Partie installation et actions		   //
////////////////////////////////////////////////////////
	
	while(manette)// boucle de contrôle des actions de la manette
		{
		
				ioPadGetInfo2(&joypadInfo);
	
				if(joypadInfo.port_status[0])
				{
					ioPadGetData(0, &joypadData);
						if( joypadData.BTN_SQUARE )// si bouton CARRE
							{SDL_Surface *restore = NULL; //initialise la variable restore à 0
							restore = TTF_RenderText_Blended(font2, "REStAURAtION EFFECTUEE", colorred); //défini le contenu de la variable restore
if(type==1)
		{	
			if ((version=='4')&(version2=='8')&(version3=='1'))	
			{					
				{if(is_dev_blind_mounted()!=0); // verifie que dev_blind n'est pas monté
								
					mount_dev_blind();// monte dev_blind   
									
									//restaure les fichiers d'un point "a" à un point "b" 
						FILE* backupf1 = NULL;
						backupf1 = fopen("/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.cex", "r");
									
						if(backupf1 == NULL)
						{
						fclose(backupf1);
										
										
						SDL_Surface *nofiles = NULL; //initialise la variable restore à 0
						nofiles = TTF_RenderText_Blended(font2, "PAS DE BACKUP !!!", colorred); //défini le contenu
								
						position.x = 280; //position horizontale de nofiles  et isntall???
						position.y = 512; //position verticale de nofiles
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(nofiles, NULL, ecran, &position);//transfert de la surface de nofiles sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(nofiles); //le programme détruit la surface nofiles
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
										
								
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console
								}	
									
						CopyFile("/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.cex","/dev_blind/Rebug/cobra/stage2.cex");
						position.x = 200; //position horizontale de restore
						position.y = 512; //position verticale de restore
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(restore, NULL, ecran, &position);//transfert de la surface de restore sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(restore);
						SDL_FreeSurface(ecran);//le programme détruit la surface restore
						unmount_dev_blind();// annule le montage de dev_blind
						fclose(f);
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

							return 0;
							}
			}
			else
		{

						SDL_Surface *incompatible = NULL; //initialise la variable restore à 0
						incompatible = TTF_RenderText_Blended(font2, "CONSOLE INCOMPAtIBLE", colorred); //défini le contenu
								
						
						position.x = 200; //position horizontale de restore
						position.y = 512; //position verticale de restore
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(incompatible, NULL, ecran, &position);//transfert de la surface de restore sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(incompatible); //le programme détruit la surface restore
						SDL_FreeSurface(ecran);
						unmount_dev_blind();// annule le montage de dev_blind
						fclose(f);
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

									return 0;
		}
}
else if(type==2)
		{	
			if ((version=='4')&(version2=='8')&(version3=='1'))
			{					
				{if(is_dev_blind_mounted()!=0); // verifie que dev_blind n'est pas monté
								
						mount_dev_blind();// monte dev_blind   
									
									//restaure les fichiers d'un point "a" à un point "b" 
						FILE* backupf2 = NULL;
						backupf2 = fopen("/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.dex", "r");
									
						if(backupf2 == NULL)
										{
										fclose(backupf2);								
										
						SDL_Surface *nofiles = NULL; //initialise la variable restore à 0
						nofiles = TTF_RenderText_Blended(font2, "PAS DE BACKUP !!!", colorred); //défini le contenu
								
						position.x = 280; //position horizontale de nofiles  et isntall???
						position.y = 512; //position verticale de nofiles
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(nofiles, NULL, ecran, &position);//transfert de la surface de nofiles sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(nofiles); //le programme détruit la surface nofiles
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
										
								
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console
										}
									
						CopyFile("/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.dex","/dev_blind/Rebug/cobra/stage2.dex");
									
						position.x = 200; //position horizontale de restore
						position.y = 512; //position verticale de restore
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(restore, NULL, ecran, &position);//transfert de la surface de restore sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(restore);
						SDL_FreeSurface(ecran);									//le programme détruit la surface restore
						unmount_dev_blind();
						fclose(f);// annule le montage de dev_blind
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

									return 0;
								}
		}

else
		{

						SDL_Surface *incompatible = NULL; //initialise la variable restore à 0
						incompatible = TTF_RenderText_Blended(font2, "CONSOLE INCOMPAtIBLE", colorred); //défini le contenu
								
						
						position.x = 200; //position horizontale de restore
						position.y = 512; //position verticale de restore
						{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
						SDL_BlitSurface(incompatible, NULL, ecran, &position);//transfert de la surface de restore sur la surface ecran
						SDL_Flip(ecran); //mise a jour de l'écran
						SDL_Delay(5000); // le programme fait une pause 5 secondes
						SDL_FreeSurface(incompatible); //le programme détruit la surface restore
						SDL_FreeSurface(ecran);
						unmount_dev_blind();
						fclose(f);// annule le montage de dev_blind
						sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

						return 0;
		}
							
							
}
}				
				
						
		if( joypadData.BTN_TRIANGLE )// si bouton TRIANGLE
				{
					
						 
						position.x = 0;  //position horizontale de imagedefond
						position.y = 0; //position verticale de imagedefond
						SDL_BlitSurface(aboutfnd, NULL, ecran, &position); //transfert de la surface de imagedefond sur la surface ecran
						
						
						position.x = 530; //position horizontale de	about	
						position.y = 50; //position verticale de about
						SDL_BlitSurface(about, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran	
						
						position.x = 220; //position horizontale de	about2	
						position.y = 150; //position verticale de about2
						SDL_BlitSurface(about2, NULL, ecran, &position); //transfert de la surface de about2 sur la surface ecran	
						
						position.x = 120; //position horizontale de	about3	
						position.y = 190; //position verticale de about3
						SDL_BlitSurface(about3, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran	
												
						position.x = 120; //position horizontale de	about4	
						position.y = 220; //position verticale de about4
						SDL_BlitSurface(about4, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran	
												
						position.x = 120; //position horizontale de	about5	
						position.y = 260; //position verticale de about5
						SDL_BlitSurface(about5, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran

						position.x = 100; //position horizontale de about6	
						position.y = 340; //position verticale de about5
						SDL_BlitSurface(about6, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran						
						
						position.x = 50; //position horizontale de aboutls	
						position.y = 640; //position verticale de aboutls
						SDL_BlitSurface(aboutls, NULL, ecran, &position); //transfert de la surface de about sur la surface ecran	
						
						position.x = 680; //position horizontale de	texteCROSS1								
						position.y = 655; //position verticale de texteCROSS1
						SDL_BlitSurface(LR, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
						position.x = 840; //position horizontale de texteTRIANGLE1
						position.y = 665; //position verticale de texteTRIANGLE1
						SDL_BlitSurface(texteLR2, NULL, ecran, &position);
						
						SDL_Flip(ecran);
							//SDL_Surface *about = NULL;//initialise la variable about à 0
							//about=SDL_LoadBMP("/dev_hdd0/game/REDJ00011/USRDIR/about.bmp");//défini le contenu de la variable about
							//SDL_BlitSurface(about, NULL, ecran, NULL);//transfert de la surface de about sur la surface ecran
							//SDL_Flip(ecran);//mise à jour de l'écran
						}
						
						if( joypadData.BTN_L1 )// si bouton TRIANGLE
						{
		position.x = 0;  //position horizontale de imagedefond
		position.y = 0; //position verticale de imagedefond
		SDL_BlitSurface(imagedefond2, NULL, ecran, &position); 

		//usleep(200);

		position.x = 160; //position horizontale de	TITLE	
        position.y = 20; //position verticale de TITLE
		SDL_BlitSurface(TITLE, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		////////
		position.x = 50; //position horizontale de	type	
        position.y = 100; //position verticale de type
		SDL_BlitSurface(ttype, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		
		position.x = 200; //position horizontale de	texteUse						///////////////////		
        position.y = 440; //position verticale de texteUse
		SDL_BlitSurface(texteUse, NULL, ecran, &position); //transfert de la surface de texteUse sur la surface ecran
		
		position.x = 140; //position horizontale de	texteUse2								
        position.y = 480; //position verticale de texteUse2
		SDL_BlitSurface(texteUse2, NULL, ecran, &position); //transfert de la surface de texteUse2 sur la surface ecran
		
        position.x = 50; //position horizontale de CROSS1
        position.y = 570; //position verticale de CROSS1
		SDL_BlitSurface(CROSS1, NULL, ecran, &position);  //transfert de la surface de CROSS1 sur la surface ecran
        
		position.x = 100; //position horizontale de	texteCROSS1								
        position.y = 580; //position verticale de texteCROSS1
		SDL_BlitSurface(texteCROSS1, NULL, ecran, &position); //transfert de la surface de texteCROSS1 sur la surface ecran
		
		
		position.x = 110; //position horizontale de SQUARE1
		position.y = 610; //position verticale de SQUARE1
		SDL_BlitSurface(SQUARE1, NULL, ecran, &position); //transfert de la surface de SQUARE1 sur la surface ecran
        
		position.x = 160; //position horizontale de texteSQUARE1
		position.y = 620; //position verticale de texteSQUARE1
		SDL_BlitSurface(texteSQUARE1, NULL, ecran, &position); //transfert de la surface de texteSQUARE1 sur la surface ecran
		
		
        position.x = 900; //position horizontale de CIRCLE1
		position.y = 570; //position verticale de CIRCLE1
		SDL_BlitSurface(CIRCLE1, NULL, ecran, &position); //transfert de la surface de CIRCLE1 sur la surface ecran
        
		
		position.x = 950; //position horizontale de texteCIRCLE1
        position.y = 580; //position verticale de texteCIRCLE1
		SDL_BlitSurface(texteCIRCLE1, NULL, ecran, &position); //transfert de la surface de texteCIRCLE1 sur la surface ecran
		
		
        position.x = 840; //position horizontale de TRIANGLE1
		position.y = 610; //position verticale de TRIANGLE1
		SDL_BlitSurface(TRIANGLE1, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 900; //position horizontale de texteTRIANGLE1
		position.y = 620; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteTRIANGLE1, NULL, ecran, &position); //transfert de la surface de texteTRIANGLE1 sur la surface ecran
		
		position.x = 260; //position horizontale de	texteCROSS1								
        position.y = 655; //position verticale de texteCROSS1
		SDL_BlitSurface(LR, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 420; //position horizontale de texteTRIANGLE1
		position.y = 665; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteLR, NULL, ecran, &position);
		
        SDL_Flip(ecran);

							
						}
						
						
						if( joypadData.BTN_R1 )// si bouton TRIANGLE
						{
		position.x = 0;  //position horizontale de imagedefond
		position.y = 0; //position verticale de imagedefond
		SDL_BlitSurface(imagedefond3, NULL, ecran, &position); 

		//usleep(200);

		position.x = 160; //position horizontale de	TITLE	
        position.y = 20; //position verticale de TITLE
		SDL_BlitSurface(TITLE, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		////////
		position.x = 50; //position horizontale de	type	
        position.y = 100; //position verticale de type
		SDL_BlitSurface(ttype, NULL, ecran, &position); //transfert de la surface de TITLE sur la surface ecran
		
		
		position.x = 200; //position horizontale de	texteUse						///////////////////		
        position.y = 440; //position verticale de texteUse
		SDL_BlitSurface(texteUse, NULL, ecran, &position); //transfert de la surface de texteUse sur la surface ecran
		
		position.x = 140; //position horizontale de	texteUse2								
        position.y = 480; //position verticale de texteUse2
		SDL_BlitSurface(texteUse2, NULL, ecran, &position); //transfert de la surface de texteUse2 sur la surface ecran
		
        position.x = 50; //position horizontale de CROSS1
        position.y = 570; //position verticale de CROSS1
		SDL_BlitSurface(CROSS1, NULL, ecran, &position);  //transfert de la surface de CROSS1 sur la surface ecran
        
		position.x = 100; //position horizontale de	texteCROSS1								
        position.y = 580; //position verticale de texteCROSS1
		SDL_BlitSurface(texteCROSS1, NULL, ecran, &position); //transfert de la surface de texteCROSS1 sur la surface ecran
		
		
		position.x = 110; //position horizontale de SQUARE1
		position.y = 610; //position verticale de SQUARE1
		SDL_BlitSurface(SQUARE1, NULL, ecran, &position); //transfert de la surface de SQUARE1 sur la surface ecran
        
		position.x = 160; //position horizontale de texteSQUARE1
		position.y = 620; //position verticale de texteSQUARE1
		SDL_BlitSurface(texteSQUARE1, NULL, ecran, &position); //transfert de la surface de texteSQUARE1 sur la surface ecran
		
		
        position.x = 900; //position horizontale de CIRCLE1
		position.y = 570; //position verticale de CIRCLE1
		SDL_BlitSurface(CIRCLE1, NULL, ecran, &position); //transfert de la surface de CIRCLE1 sur la surface ecran
        
		
		position.x = 950; //position horizontale de texteCIRCLE1
        position.y = 580; //position verticale de texteCIRCLE1
		SDL_BlitSurface(texteCIRCLE1, NULL, ecran, &position); //transfert de la surface de texteCIRCLE1 sur la surface ecran
		
		
        position.x = 840; //position horizontale de TRIANGLE1
		position.y = 610; //position verticale de TRIANGLE1
		SDL_BlitSurface(TRIANGLE1, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 900; //position horizontale de texteTRIANGLE1
		position.y = 620; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteTRIANGLE1, NULL, ecran, &position); //transfert de la surface de texteTRIANGLE1 sur la surface ecran
		
		position.x = 260; //position horizontale de	texteCROSS1								
        position.y = 655; //position verticale de texteCROSS1
		SDL_BlitSurface(LR, NULL, ecran, &position); //transfert de la surface de TRIANGLE1 sur la surface ecran
		
        position.x = 420; //position horizontale de texteTRIANGLE1
		position.y = 665; //position verticale de texteTRIANGLE1
		SDL_BlitSurface(texteLR, NULL, ecran, &position);
		
        SDL_Flip(ecran);
						 
							
				}
							
				if( joypadData.BTN_CROSS )// si bouton Croix
					{SDL_Surface *install = NULL; //initialise la variable restore à 0
					install = TTF_RenderText_Blended(font2, "INStALLAtion EFFECTUEE", colorred); //défini le contenu de la variable restore
if(type==1)// verifie le type de console cex dex tool
		{	
			if ((version=='4')&(version2=='8')&(version3=='1'))	// verifie que le fw est bien 4.81
			{											
				{if(is_dev_blind_mounted()!=0); // verifie que dev_blind n'est pas monté
								
					mount_dev_blind();// monte dev_blind   
								
					//restaure les fichiers d'un point "a" à un point "b" 
					CopyFile("/dev_blind/Rebug/cobra/stage2.cex","/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.cex");
					CopyFile("/dev_hdd0/game/COBJ75011/USRDIR/stage2.cex","/dev_blind/Rebug/cobra/stage2.cex");
					position.x = 200; //position horizontale de restore
					position.y = 512; //position verticale de restore
					{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
					SDL_BlitSurface(install, NULL, ecran, &position);//transfert de la surface de install sur la surface ecran
					SDL_Flip(ecran); //mise a jour de l'écran
					SDL_Delay(5000); // le programme fait une pause 5 secondes
					SDL_FreeSurface(install);
					SDL_FreeSurface(ecran);//le programme détruit la surface 
					unmount_dev_blind();// annule le montage de dev_blind
					fclose(f);
					sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
						{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

									return 0;
							}
			}
			else
		{

					SDL_Surface *incompatible = NULL; //initialise la variable restore à 0
					incompatible = TTF_RenderText_Blended(font2, "CONSOLE INCOMPAtIBLE", colorred); //défini le contenu
								
						
					position.x = 200; //position horizontale de restore
					position.y = 512; //position verticale de restore
					{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
					SDL_BlitSurface(incompatible, NULL, ecran, &position);//transfert de la surface de incompatible sur la surface ecran
					SDL_Flip(ecran); //mise a jour de l'écran
					SDL_Delay(5000); // le programme fait une pause 5 secondes
					SDL_FreeSurface(incompatible); //le programme détruit la surface
					SDL_FreeSurface(ecran);
					unmount_dev_blind();// annule le montage de dev_blind
					fclose(f);
					sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
					{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

					return 0;
		}
}
else if(type==2)
		{	
			if ((version=='4')&(version2=='8')&(version3=='1'))
			{							
				{if(is_dev_blind_mounted()!=0); // verifie que dev_blind n'est pas monté
								
					mount_dev_blind();// monte dev_blind   
									
					//restaure les fichiers d'un point "a" à un point "b" 
					CopyFile("/dev_blind/Rebug/cobra/stage2.dex","/dev_hdd0/game/COBJ75011/USRDIR/BACKUP/stage2.dex");
					CopyFile("/dev_hdd0/game/COBJ75011/USRDIR/stage2.dex","/dev_blind/Rebug/cobra/stage2.dex");
									
					position.x = 200; //position horizontale de restore
					position.y = 512; //position verticale de restore
					{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
					SDL_BlitSurface(install, NULL, ecran, &position);//transfert de la surface de install sur la surface ecran
					SDL_Flip(ecran); //mise a jour de l'écran
					SDL_Delay(5000); // le programme fait une pause 5 secondes
					SDL_FreeSurface(install);
					SDL_FreeSurface(ecran);//le programme détruit la surface
					unmount_dev_blind();// annule le montage de dev_blind
					fclose(f);
					sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
					{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

					return 0;
								}
			}

else
		{

					SDL_Surface *incompatible = NULL; //initialise la variable restore à 0
					incompatible = TTF_RenderText_Blended(font2, "CONSOLE INCOMPAtIBLE", colorred); //défini le contenu
									
						
					position.x = 200; //position horizontale de restore
					position.y = 512; //position verticale de restore
					{ lv2syscall3(392, 0x1004, 0x4, 0x6); } //émet un bip sonore
					SDL_BlitSurface(incompatible, NULL, ecran, &position);//transfert de la surface de incompatible sur la surface ecran
					SDL_Flip(ecran); //mise a jour de l'écran
					SDL_Delay(5000); // le programme fait une pause 5 secondes
					SDL_FreeSurface(incompatible); //le programme détruit la surface restore
					SDL_FreeSurface(ecran);
					unmount_dev_blind();// annule le montage de dev_blind
					fclose(f);
					sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
							
									{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

									return 0;
		}
							
							
}
}
				
				if( joypadData.BTN_CIRCLE ) //si rond
				{SDL_FreeSurface(ecran);//le programme détruit la surface install
							
				sysLv2FsUnlink("/dev_hdd0/tmp/turnoff");// quitte le programme de la bonne manière
				{lv2syscall3(SC_SYS_POWER, SYS_REBOOT, 0, 0); return_to_user_prog(int);}// Reboot la console

										
				return 0;
						}
				
									
				}
		
		
		SDL_Flip(ecran);//mise à jour de l'écran
		


		}
		
		
		
		TTF_CloseFont(font);//le programme ferme la police d'ecriture font
		TTF_CloseFont(font2);//le programme ferme la police d'ecriture font2
		SDL_FreeSurface(texteSQUARE1);//le programme détruit la surface texteSQUARE1
		SDL_FreeSurface(texteTRIANGLE1);//le programme détruit la surface TRIANGLE1
		SDL_FreeSurface(texteCROSS1);//le programme détruit la surface texteCROSS1
		SDL_FreeSurface(texteCIRCLE1);//le programme détruit la surface texteCIRCLE1
		SDL_FreeSurface(TITLE);//le programme détruit la surface TITLE
		SDL_FreeSurface(about);//le programme détruit la surface about

		TTF_Quit();// quite le contexte TTF de SDL
		

	SDL_FreeSurface(imagedefond);//le programme détruit la surface imagedefond
	SDL_FreeSurface(SQUARE1);//le programme détruit la surface SQUARE1
	SDL_FreeSurface(TRIANGLE1);//le programme détruit la surface TRIANGLE1
	SDL_FreeSurface(CROSS1);//le programme détruit la surface CROSS1
	SDL_FreeSurface(CIRCLE1);//le programme détruit la surface CIRCLE1

	
	SDL_Quit();// quite le contexte SDL
	
	return 0;
}

copy.c

#include <fcntl.h>
#include <ppu-lv2.h>
#include <sys/file.h>
#include <stdio.h>
#include <string.h>
#include "COPY.H"

#define SUCCESS 0
#define FAILED -1

#define SC_SYS_POWER 					(379)
#define SYS_REBOOT				 		0x8201

 ////////////////////////////////////////////
 //Paramètres système de copie de fichiers //
////////////////////////////////////////////

int CopyFile(const char* path, const char* path2)
{
	int ret = 0;
	s32 fd = -1;
	s32 fd2 = -1;
	u64 lenght = 0LL;

	u64 pos = 0ULL;
	u64 readed = 0, writed = 0;

	char *mem = NULL;

	sysFSStat stat;

	ret= sysLv2FsStat(path, &stat);
	lenght = stat.st_size;

	if(ret) goto skip;

	if(strstr(path, "/dev_hdd0/") != NULL && strstr(path2, "/dev_hdd0/") != NULL)
	{
		if(strcmp(path, path2)==0) return ret;

		sysLv2FsUnlink(path2);
		sysLv2FsLink(path, path2);

		if (sysLv2FsStat(path2, &stat) == 0) return 0;
	}

	ret = sysLv2FsOpen(path, 0, &fd, S_IRWXU | S_IRWXG | S_IRWXO, NULL, 0);
	if(ret) goto skip;

	ret = sysLv2FsOpen(path2, SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &fd2, 0777, NULL, 0);
	if(ret) {sysLv2FsClose(fd);goto skip;}

	mem = malloc(0x100000);
	if (mem == NULL) return FAILED;

	while(pos < lenght)
	{
		readed = lenght - pos; if(readed > 0x100000ULL) readed = 0x100000ULL;
		ret=sysLv2FsRead(fd, mem, readed, &writed);
		if(ret<0) goto skip;
		if(readed != writed) {ret = 0x8001000C; goto skip;}

		ret=sysLv2FsWrite(fd2, mem, readed, &writed);
		if(ret<0) goto skip;
		if(readed != writed) {ret = 0x8001000C; goto skip;}

		pos += readed;
	}
  ////////////////////////////////////////////
 //            Vidage de la mémoire        //
////////////////////////////////////////////

skip:

	if(mem) free(mem);
	if(fd >=0) sysLv2FsClose(fd);
	if(fd2>=0) sysLv2FsClose(fd2);
	if(ret) return ret;

	ret = sysLv2FsStat(path2, &stat);
	if((ret == SUCCESS) && (stat.st_size == lenght)) ret = SUCCESS; else ret = FAILED;

	return ret;
}

copy.h

/*
UnEnTete.h
*/
 
/* Code pour éviter les erreurs quand on inclue deux fois le fichier */
#ifndef H_FILES
#define H_FILES


 #ifdef __cplusplus
extern "C" {
#endif



int CopyFile(const char* path, const char* path2);

#ifdef __cplusplus
}
#endif
 
#endif /* H_FILES*/

syscalls.cpp

#include "syscalls.h"




s32 sysFsMount(const char* MOUNT_POINT, const char* TYPE_OF_FILESYSTEM, const char* PATH_TO_MOUNT, int IF_READ_ONLY)
{
	lv2syscall8(837, (u64)MOUNT_POINT, (u64)TYPE_OF_FILESYSTEM, (u64)PATH_TO_MOUNT, 0, IF_READ_ONLY, 0, 0, 0);
	return_to_user_prog(s32);
}

s32 sysFsUnmount(const char* PATH_TO_UNMOUNT)
{
	lv2syscall1(838, (u64)PATH_TO_UNMOUNT);
	return_to_user_prog(s32);
}

u32 reboot_sys(string reboottype)
{
	uint16_t op;

	if (reboottype=="soft") op=0x200;
	else op=0x1200;
	lv2syscall4(379,op,0,0,0);
	return_to_user_prog(u32);
}



int is_dev_blind_mounted()
{
	const char* MOUNT_POINT = "/dev_blind"; //our mount point
	sysFSStat dir;

	return sysFsStat(MOUNT_POINT, &dir);
}

int mount_dev_blind()
{
	const char* DEV_BLIND = "CELL_FS_IOS:BUILTIN_FLSH1";	// dev_flash
	const char* FAT = "CELL_FS_FAT"; //it's also for fat32
	const char* MOUNT_POINT = "/dev_blind"; //our mount point

	sysFsMount(DEV_BLIND, FAT, MOUNT_POINT, 0);

	return 0;
}

int unmount_dev_blind()
{
	const char* MOUNT_POINT = "/dev_blind"; //our mount point

	sysFsUnmount(MOUNT_POINT);

	return 0;
}

makefile

#---------------------------------------------------------------------------------
# Clear the implicit built in rules
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------
ifeq ($(strip $(PSL1GHT)),)
$(error "Please set PSL1GHT in your environment. export PSL1GHT=<path>")
endif

include $(PSL1GHT)/ppu_rules

#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET		:=	$(notdir $(CURDIR))
BUILD		:=	build
SOURCES		:=	source
DATA		:=	data
INCLUDES	:=	include
PKGFILES	:=	$(CURDIR)/pkgfiles

TITLE		:=	Cobra Installer 7.50 habib
APPID		:=	COBJ75011
CONTENTID	:=      UP0001-$(APPID)_00-0000000000000000


#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
# aditional scetool flags (--self-ctrl-flags, --self-cap-flags...)
SCETOOL_FLAGS	+=	--self-ctrl-flags 4000000000000000000000000000000000000000000000000000000000000002
SCETOOL_FLAGS	+=	--self-cap-flags 00000000000000000000000000000000000000000000007B0000000100000000

CFLAGS		=	-O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE)
ASFLAGS		=	$(INCLUDE) 
CXXFLAGS	=	$(CFLAGS)

LDFLAGS		=	$(MACHDEP) -Wl,-Map,$(notdir $@).map

#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS	:=	-lSDL_ttf -lSDL_image -lfreetype -lz -lSDl -lSDLmain -lgcm_sys -lrsx -lsysutil -lio -lnet -lsysmodule -laudio -lrt -llv2 -lm -lsysfs

#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS	:= $(PORTLIBS)

#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------

export OUTPUT	:=	$(CURDIR)/$(TARGET)

export VPATH	:=	$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
					$(foreach dir,$(DATA),$(CURDIR)/$(dir))

export DEPSDIR	:=	$(CURDIR)/$(BUILD)

export BUILDDIR	:=	$(CURDIR)/$(BUILD)

#---------------------------------------------------------------------------------
# automatically build a list of object files for our project
#---------------------------------------------------------------------------------
CFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
sFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
SFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
BINFILES	:=	$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))

#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
	export LD	:=	$(CC)
else
	export LD	:=	$(CXX)
endif

export OFILES	:=	$(addsuffix .o,$(BINFILES)) \
					$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
					$(sFILES:.s=.o) $(SFILES:.S=.o)

#---------------------------------------------------------------------------------
# build a list of include paths
#---------------------------------------------------------------------------------
export INCLUDE	:=	$(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \
					$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
					$(LIBPSL1GHT_INC) \
					-I$(CURDIR)/$(BUILD)

#---------------------------------------------------------------------------------
# build a list of library paths
#---------------------------------------------------------------------------------
export LIBPATHS	:=	$(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
					$(LIBPSL1GHT_LIB)

export OUTPUT	:=	$(CURDIR)/$(TARGET)
.PHONY: $(BUILD) clean

#---------------------------------------------------------------------------------
$(BUILD):
	@[ -d $@ ] || mkdir -p $@
	@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

#---------------------------------------------------------------------------------
clean:
	@echo clean ...
	@rm -fr $(BUILD) $(OUTPUT).elf *.pkg *.self

#---------------------------------------------------------------------------------
run:
	ps3load $(OUTPUT).self

#---------------------------------------------------------------------------------
pkg:	$(BUILD) $(OUTPUT).pkg

#---------------------------------------------------------------------------------
else

DEPENDS	:=	$(OFILES:.o=.d)

#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).self: $(OUTPUT).elf
$(OUTPUT).elf:	$(OFILES)

#---------------------------------------------------------------------------------
# This rule links in binary data with the .bin extension
#---------------------------------------------------------------------------------
%.bin.o	:	%.bin
#---------------------------------------------------------------------------------
	@echo $(notdir $<)
	@$(bin2o)

-include $(DEPENDS)

#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------

 

Edited by Red-j
  • Confused 1
  • Nice 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×