Aller au contenu

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

Custom Themes Manager V4, iTLS-Enso V1.5, IMCUnlock V3

Le célèbre red Squirrel's met à jour son petit bébé Custom Thèmes Manager avec des corrections de bug et des nouveautés. Ce logiciel vous permet d'installer des thèmes pour vôtre PSVita/TV. Il peut être traduit en français si vous le souhaitez il suffit de télécharger le fichier CTM.txt de le traduire et le mettre à la racine de UX0

Téléchargements
Mister SKGleba met à jour iTLS-Enso et IMCUnlock. 
Le premier est pour ceux qui sont sous le firmware 3.68 cela vous permettra de pouvoir naviguer sur les sites nécessitant iTLS 1.2 comme GITHUB qui n'est pas supporté en dessous du 3.68 et pouvoir utiliser pleinement Download Enabler 

Pour l'installer rien de plus simple, allez le Télécharger ensuite
Le deuxième vous permettra d'avoir une partition IMC donc interne sur votre PSVita FAT donc cela s'adresse aux possesseur de Vita 1000 et non Slim 2000. Comment cela fonctionne rien de plus simple l'application va changer les partitions, PD0 prend place sur UR0 et IMC0 prend place sur UR0 donc vous l'aurez compris transformation de UR0 en IMC0 
Comment cela ce met en place rien de plus simple 
Pour les possesseurs d'ENZO assurez vous d'avoir l'installeur ENZO sur vôtre Vita car il faudra reinstaller ENZO par dessus pour que cela fonctionne donc pour vous ce sera CIRCLE puis reboot et pour les autres uniquement reboot. Si le redémarrage de la console ce fait correctement à vous le plaisir d'une mémoire interne 
En savoir plus…

ZeroTwoXCI - l'installateur des fichiers XCI

L'avantage de publié les codes sources d'un homebrew est parfois bénéfique car yyoossk, un dev Japonais à pu modifié l'installateur des fichiers .nsp qui est Tinfoil en ZeroTwoXCI. La nouveauté est que vous n'aurez plus besoin de convertir vos jeux en .xci vers le .nsp afin de les installer, le programme se chargera de tout et installera le jeu directement dans la console ou la carte mémoire, tout dépendra de vous.

Le principe est le même qu'avec les fichiers .nsp mais juste le répertoire des fichiers qui change de nom de "Tinfoil/nsp" en "Tinfoil/zerotwoxci" puis de faire comme toujours :
Title Management

Install XCI

Choisir l'emplacement qui recevra le fichier à installer "SD card" ou "NAND (console)"

Une fois lancé, le programme se chargera en premier de vérifié votre fichier "Keys.dat" qui est nécessaire à son fonctionnement et le temps de la conversion dépendra de la taille de votre fichier. Soyez juste patient même si vous avez l'impression que votre console est figée...

Source et téléchargement :

L'auteur précise que le programme est encore en phase d'évolution donc merci de lui rapporté un rapport sur le lien ci-dessous et il est conseillé de convertir vos fichiers .xci en .nsp si vous ne voulez pas prendre de risque.
Ci-dessous, le .nro avec une icône modifiée par mes soins :
ZeroTwoXCI.rar
En savoir plus…

SHM : Sony Homebrew Manager par MRGhidini

Auteur du fabuleux programme PC pour bien exploité sa PSVita "Psvimgtools Easy FrontEnd", MRGhidini sort un tout nouveau programme PC comme toujours pour télécharger des homebrews de la Psvita / PS3 / PS4 directement depuis votre PC.

Le programme a droit aux fichiers .tsv (héberger ou via un site) pour bien fonctionner car il donne une erreur à son premier lancement. Il vous suffira alors de lui donné le lien vers vos homebrews via le menu Setting.


Le programme dispose d'une barre de chargement lors d'un téléchargement et marquera le fichier télécharger d'une couleur ensuite gardera votre historique de téléchargement dans le fichier historic.txt.

Vous pouvez aussi aller sur le git officiel de l'homebrew ou visionner une vidéo pour plus d'info sur l'homebrew à télécharger.

Le programme nécessite .NET Framework 4.6.1 minimum pour bien fonctionner et il est compatible avec Windows 7 (32bits / 64bits), Windows 8 (32bits / 64bits), Windows 10 (32bits / 64bits).
En savoir plus…

Autoplugin et Autovpk se mettent à jour

Les deux supers homebrews crée par theheroGAC se mettent à jour vers la version 3.32 pour Autoplugin et 1.06 pour AutoVPK

Le programme inclus des nouvelles versions de plugin et un tout nouveau plugin de "Custom Splash Boot" de Princess of sleeping. Ce plugin va vous permettre de placer une image au démarrage de votre console. Plus tard, la Team Onelua à amélioré le plugin et cela ne nécessite plus d'aller sur le répertoire ur0:/tai pour modifier le fichier "config_boot.txt" qui est très sensible à votre console, maintenant vos images seront placé dans "ux0:CustomBootsplash" avec pour extension PNG et dimension 960X544 et nommé "splash.png". L'installateur peut aussi convertir votre image en splash.bin pour vous depuis votre console.
Changelog des 3 dernières versions majeures de Autoplugin :

 

Ce homebrew n'a pas subit trop de mise à jour à part une amélioration du système et l'ajout de PKGJ en v0.37
Changelog pour AutoVPK :

 
Un nouveau homebrew encore crée par notre dev theheroGAC a vu le jour, c'est Easy-Ds3, avec cet homebrew, vous aurez plus du mal à connecter votre manette DualShock 3 à la PSVita, il vous dira quoi faire et de quoi aurez-vous besoin pour bien parié votre manette à la PSVita.

Changelog :

En savoir plus…

PS4 firmware 6.00 disponible

Après le firmware 5.56 de la PS4 qui venait corrigé un problème lié au jeu Final Fantasy XIV et de la fameuse "amélioration des performances du logiciel système", vient le firmware 6.00
Pour le changelog, comme toujours, une amélioration des performances du logiciel système a été revu et d'après des retours sur le coté underground, il semblerais que SONY a su modifié le webkit sur ce fameux firmware rendant le point d'entré du hack PS4 sur ce point difficile.


Si vous voulez profitez du hack sur votre console, il est conseillé de resté sur le firmware 5.05 car c'est le golden firmware hackable pour le moment sur la PS4.
En savoir plus…

Chatbox - 126656 Messages. Spammers: neoskyriper (19639) . chronoss (17810) . crash over ride (13769) .

Charger plus
    Vous n'êtes pas autorisé à Chatter. Vous devez participer au moins une fois sur le Forum pour y avoir accès
    Red-j

    Code source commenté de Cobra Installer 7.50

    Messages recommandés

    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
    #---------------------------------------------------------------------------------

     

    Modifié par Red-j
    • Confus 1
    • Nice 1

    Partager ce message


    Lien à poster
    Partager sur d’autres sites

    Créer un compte ou se connecter pour commenter

    Vous devez être membre afin de pouvoir déposer un commentaire

    Créer un compte

    Créez un compte sur notre communauté. C’est facile !

    Créer un nouveau compte

    Se connecter

    Vous avez déjà un compte ? Connectez-vous ici.

    Connectez-vous maintenant

    ×