96w ago - Following up on the recent
video footage, today Spanish PlayStation 3 CFW developers
DemonHades and
JaicraB have shared a status update and pics on the upcoming JFW DH PS3 Custom Firmware.
Download:
Base PS3 FW Instructions (PDF) /
MinVerChk Minimum PS3 Version Check Tool for PS3 /
OpenPStore SVN
To quote, roughly translated:
Percentage Level of Development
- Central-Core - 100%
- Cobra-Payload - 60%
- Linux - 95%
- Preloader - 90%
- XMB Categories - 95%
- Thegra Manager - 25%
- Thegra - 100%
- Services Packs - 0%
- OpenPStore - 50%
New categories such as Multimedia, PS3 Loader, Thegra, Homebrew, Emulators, manager set aside the typical native application. Photos, Music, Videos, TV, disappear to make way for Multimedia.
New Category
This new category gives rise to a union of native options like photo, music and video. This new category will appear the famous player Showtime, which already includes the possibility of a single application in many more options than what they offered us the categories natively native officers.
- Reproduction native (the PS3 system) MUSIC, PHOTOS and VIDEO, DVD, BD, photo gallery and soon Cdaudio the VidZone, memories and play qriocity
- Listen to music
- Being able to see videos like avi, mpeg, xvid, divx, MKV including
- View photos
- Demand movies
- TV-Channel
PS3 Loader
This new category was born to take charge from now manage the contents of the old Sony consoles, this means that both PS1/PS2/Minis Games and the saves these become part of this new category, freeing imnecesarios to GAME icon.
It is also where you store the backups RetroLoader (aka modified cobrausb backup manager) responsible for managing the games PS1, PS2 and PS3
Thegra - the new star category and plugins
This new category includes the plugins manager, service packs. Thegra is the name of the loader plugins, these plugins will give the console first choices, which the imagination of every developer could unleash the potential of this charger.
- Return of the online (running)
- Update of keys (working)
- Spoof Version
- Disable devices
- Mounted units, several readers virtual
- Plugins level conbinacion buttons on the six
- Modification speedfun speed
- Multiloader (operating)
- Dumper full-ram (running)
- PSN-games license generator (operating)
- Hacked signature verification token QA (running)
- Reboot
- PSN access sysversion check "no spoof nor certs" (running)
- Check-patching the original disks (operating)
- Activation of the 8th SPU
- Etc
Emulators
This new category will be responsible for having ordered all the old console emulators.
Homebrew
This new category includes all homebrew created to date, for it will have access to from where you can download OpenPStore the last hombrews etc. to be placed automatically at their place of origin and not as the previous game.
Gestor
This category will see that we can easily able to manage the game saves, pkgs, ftp, etc.
Cobra JFW Payload Plugin
- DH and has advanced the issue.
New Item Linux
The JFW DH was gonna be no less, that includes 2 options to use Linux back in the console, in this regard are:
JFW Preloader - The recovery of DH includes a preloader that is responsible for:
- Back of the 3 RAW Flash to external media (USB)
- Flashing copies from an external drive (USB).
- Update the Preloader
- Home of the flash write access (not necessarily more alejandro or substitutes)
The advantages are not required reinstalling all the PUP (from hardware checks) do not need to do: composite or go through the recovery.
Service Packs
Services include basic Packs to use plugins, loaders, ftp, etc.
Compatibility with Games and Applications
- Using a DH-JFW 341v2 core, this does not mean not being able to play all over now without patching.
- The DH-JFW is compatible with games that include between 3.56 down, including the current patched to 3.55
- DH-JFW runs natively games until 3.56 (original disks) without having to upgrade.
- PSN games that require NPDRM 356, are also supported without upgrading (the current CFW not give this support)
- No need for a valid signature on the executable (including loaders and other files)
- Not going to make a port to 3.55 of this JFW DH, since it includes much more than himself 3.55
- Support for peripherals is not licensed by sony in that medium 355 is eliminated leaving them unused
- The only custom firmware can take the keys with a dual NAND 3.6x (programmer) such as PNM and that allows the custom appldr redirect to another area of the ram and so does not remove the old
- Theme DHorg exclusive community that will change randomly each time the console or ignite the user cambieis
- More surprises
Tutorial created by
DeathHades: http://www.demonhades.org/foro/viewtopic.php?t=4856&f=297
This tutorial will teach you to how to know the base firmware of your PS3 with a few steps and images.
The things you need are:
- A PS3.
- MinVerChk (by Ifcaro / tito1)
1 - Copy MinVerChk to a USB Drive, like it is a System Software Update.
2 - Plug the USB Drive into the PS3.
3 - Install the update from XMB. The update will fail and display the Firmware Base.
Finally, below is a list of PS3 models (for fat and slim) and their base firmware courtesy of
tito1:
Base Firmware for fat PS3 model:
- 40GB CECHG04 - Fat OFW 1.90 (Max. Downgrade)
- 40GB CECHG04 - Fat OFW 1.90 (Max. Downgrade)
- 60GB CECHC04 - Fat OFW 1.0 (Max. Downgrade)
- 60GB CECHC04 - Fat OFW 1.1 (Max. Downgrade)
- 80GB CECHK04 - Fat OFW 2.16 (Max. Downgrade)
- CHECHE11 80GB - Fat OFW 2.40 (Max. Downgrade)
- Fat DECR1400A - FWD 2.60 (Max. Downgrade)
- 80GB CECHE01 - Fat OFW 1.00 (Max. Downgrade)
- 160 GB CECHP04 - Fat OFW 2.45 (Max. Downgrade)
Base Firmware for slim PS3 model:
- 120Gb SLIM OFW CECH2004A - 2.70 (Max.Downgrade)
- 120GB SLIM OFW CECH2001A - 2.70 (Max.Downgrade)
- 250GB SLIM OFW CECH2004B - 2.70 (Max.Downgrade)
- 320GB SLIM OFW CECH2504B - 3.40 (Max.Downgrade)
Because they don't want it shared or leaked in any shape, form or fashion until it is perfect.
Also below is some more details from blipi who is one of the developers working on OpenPStore: ps3crunch.net/forum/threads/353-JFW-?p=3377#post3377
Hey people. I've just heard you posted this here, and I just said to myself, let's post too. Atm I'm working on OpenPStore, which is part of the JFW. I've been working on it for many many hours, as all devs which are working on JFW, and it is just disgusting to read people saying JFW is a fake.
I've seen pics of JFW running, not all of its features though, so it's not fake. There is a whole team working hard every day to bring this to you, and I've actually talked to all of them and I do know their work is real. Just for you to know, now it is 2 am where I live, I've been working till now just to have it all ready for the beta test and not to delay it anymore.
We want to verify everything is working without any problems before releasing it, to avoid things such as bricks or weird bugs. That's why the beta and further release will take so long. So far it is all progressing fine, and I do have proofs of, at least, my work.
Here I bring you 2 proofs of how hard we are working (OpenPStore).
1- We had a problem with a pre-made library to read .xml files (mxml), which was solved by manually coding a new .xml parser.
xml_parser.h : http://pastebin.com/bqQr1YG5
//XML PARSER BY BLIPI
//Feel free to distribute and use it on any plattform and projects
#ifndef XMLPARSER_H
#define XMLPARSER_H
#include
#include
#include
#include
typedef struct xml_node_attr{
char *name;
char *value;
struct xml_node_attr *next;
}xml_node_attr;
typedef struct xml_node{
char *name;
char *value;
int level;
long start_pos;
long end_pos;
char closed;
struct xml_node_attr *attrs;
struct xml_node *next;
struct xml_node *last;
struct xml_node *child;
struct xml_node *parent;
}xml_node;
int XML_Open(char *path);
struct xml_node *XML_ParseAll();
struct xml_node *XML_SearchNodeFrom(char *name, struct xml_node *start);
struct xml_node *XML_SearchNode(char *name);
struct xml_node *XML_GetChild(struct xml_node *node);
struct xml_node *XML_GetNextNode(struct xml_node *node);
struct xml_node_attr *XML_GetNodeAttr(struct xml_node *node, char *name);
char *XML_GetNodeValue(struct xml_node *node);
void XML_EndParse(char free_tree);
#endif
xml_parser.c : http://pastebin.com/A7DsysUJ
#include "xmlparser.h"
// ----- DEFINES ----- //
#define XML_UNKNOW -1
#define XML_DUNNOHANDLE -2
#define XML_OPEN_NODE 1
#define XML_CLOSE_NODE 2
#define XML_NODE_NAME 3
#define XML_SPECIAL_NODE 4
#define XML_NAME_DELIMITER 5
#define XML_ATTR_START 6
#define XML_ATTR_DELIMITER 7
#define XML_NODE_END 8
#define XML_CLOSE_END_NODE 9
// ----- STRUCTS ----- //
typedef struct xml_reader_{
char reading_tag;
char quote_read;
char node_ending;
int lvl;
long cur_pos;
char read_buffer[1024];
char name_buffer[1024];
}xml_reader_;
xml_reader_ xml_reader = {0};
typedef struct ret_{
int ret;
char ch;
}ret_;
// ----- PROTOTYPES ----- //
void XML_FreeList( void );
struct ret_ XML_GetChar( void );
struct xml_node *XML_RecursiveSearchNode(char *name, struct xml_node *node);
// ----- VARIABLES -----//
char xml_path[1024];
char *xml_buffer = NULL;
long xml_size = 0;
struct xml_node *main_tree = NULL;
struct xml_node *current_node = NULL;
// ----- CODE ----- //
//! Abrir el archivo para parsear posteriormente
//! path: Ruta relativa o hard coded hacia el xml
//TODO: No guardar en buffer, leer char a char!
int XML_Open(char *path){
FILE *fp = fopen(path, "r");
if(!fp)
return -1;
strcpy(xml_path, path);
fseek(fp, 0, SEEK_END);
xml_size = ftell(fp);
rewind(fp);
xml_buffer = (char*)malloc(xml_size+1);
if(!xml_buffer)
return -2;
fread(xml_buffer, 1, xml_size, fp);
fclose(fp);
return 0;
}
struct ret_ XML_GetChar(){
char ch = xml_buffer[xml_reader.cur_pos++];
struct ret_ ret;
ret.ch = ch;
if(xml_reader.quote_read == 1 && ch != '"'){
ret.ret = XML_NODE_NAME;
goto endfunc;
}
if(xml_reader.reading_tag == 0){
switch(ch){
case '':
xml_reader.reading_tag = 0;
if(xml_buffer[xml_reader.cur_pos-2] == '/')
ret.ret = XML_CLOSE_END_NODE;
else
ret.ret = XML_CLOSE_NODE;
goto endfunc;
case '?':
ret.ret = XML_SPECIAL_NODE;
goto endfunc;
case ' ':
ret.ret = XML_NAME_DELIMITER;
goto endfunc;
case '=':
ret.ret = XML_ATTR_START;
goto endfunc;
case '"':
xml_reader.quote_read = !xml_reader.quote_read;
ret.ret = XML_ATTR_DELIMITER;
goto endfunc;
}
}
}
endfunc:
return ret;
}
struct xml_node *XML_ParseAll(){
char action = 0;
char ignore = 0;
int buffer_pos = 0;
memset(xml_reader.read_buffer, 0, 1024);
memset(xml_reader.name_buffer, 0, 1024);
xml_reader.reading_tag = 0;
xml_reader.quote_read = 0;
struct xml_node_attr *last_attr = NULL;
struct xml_node_attr *first_attr = NULL;
while(xml_reader.cur_pos < xml_size){
struct ret_ ret = XML_GetChar();
if(ignore && ret.ret != XML_SPECIAL_NODE)
continue;
switch(ret.ret){
case XML_SPECIAL_NODE:
ignore = !ignore;
break;
case XML_OPEN_NODE:
if(!main_tree){
main_tree = current_node = (struct xml_node*)malloc(sizeof(struct xml_node));
memset(current_node, 0, sizeof(struct xml_node));
}else if(current_node->closed){
current_node->next = (struct xml_node*)malloc(sizeof(struct xml_node));
memset(current_node->next, 0, sizeof(struct xml_node));
current_node->next->parent = current_node->parent;
current_node->next->last = current_node;
current_node = current_node->next;
}else{
current_node->child = (struct xml_node*)malloc(sizeof(struct xml_node));
memset(current_node->child, 0, sizeof(struct xml_node));
current_node->child->parent = current_node;
current_node = current_node->child;
}
action = 0;
break;
case XML_NODE_NAME:
xml_reader.read_buffer[buffer_pos++] = ret.ch;
break;
case XML_NAME_DELIMITER:{
if(buffer_pos > 0){
if(action == 0)
strcpy(xml_reader.name_buffer, xml_reader.read_buffer);
memset(xml_reader.read_buffer, 0, 1024);
buffer_pos = 0;
}
}break;
case XML_ATTR_START:{
struct xml_node_attr *temp_attr = (struct xml_node_attr*)malloc(sizeof(struct xml_node_attr));
memset(temp_attr, 0, sizeof(struct xml_node_attr));
temp_attr->name = (char*)malloc(buffer_pos);
strcpy(temp_attr->name, xml_reader.read_buffer);
if(last_attr != NULL)
last_attr->next = temp_attr;
last_attr = temp_attr;
if(first_attr == NULL)
first_attr = last_attr;
memset(xml_reader.read_buffer, 0, 1024);
buffer_pos = 0;
}break;
case XML_ATTR_DELIMITER:
if(xml_reader.quote_read == 0){
last_attr->value = (char*)malloc(buffer_pos);
strcpy(last_attr->value, xml_reader.read_buffer);
memset(xml_reader.read_buffer, 0, 1024);
buffer_pos = 0;
}
break;
case XML_CLOSE_END_NODE:
case XML_CLOSE_NODE:
if(xml_reader.node_ending == 0){
current_node->name = (char*)malloc(buffer_pos);
if(strlen(xml_reader.name_buffer) > 0)
strcpy(current_node->name, xml_reader.name_buffer);
else
strcpy(current_node->name, xml_reader.read_buffer);
current_node->level = xml_reader.lvl;
current_node->attrs = first_attr;
current_node->start_pos = xml_reader.cur_pos;
}
memset(xml_reader.name_buffer, 0, 1024);
memset(xml_reader.read_buffer, 0, 1024);
buffer_pos = 0;
first_attr = NULL;
last_attr = NULL;
if(ret.ret == XML_CLOSE_END_NODE){
current_node->closed = 1;
current_node->end_pos = xml_reader.cur_pos;
}
break;
case XML_NODE_END:
while(current_node->closed == 1)
current_node = current_node->parent;
current_node->closed = 1;
current_node->end_pos = xml_reader.cur_pos;
memset(xml_reader.name_buffer, 0, 1024);
memset(xml_reader.read_buffer, 0, 1024);
buffer_pos = 0;
break;
default:
break;
}
}
return main_tree;
}
struct xml_node *XML_RecursiveSearchNode(char *name, struct xml_node *node){
if(strcmp(name, node->name) == 0)
return node;
struct xml_node *ret = NULL;
if(node->child)
ret = XML_RecursiveSearchNode(name, node->child);
if(ret)
return ret;
if(node->next)
ret = XML_RecursiveSearchNode(name, node->next);
if(ret)
return ret;
return NULL;
}
struct xml_node *XML_SearchNodeFrom(char *name, struct xml_node *start){
return XML_RecursiveSearchNode(name, start);
}
struct xml_node *XML_SearchNode(char *name){
return XML_RecursiveSearchNode(name, main_tree);
}
struct xml_node *XML_GetChild(struct xml_node *node){
return node->child;
}
struct xml_node *XML_GetNextNode(struct xml_node *node){
return node->next;
}
struct xml_node_attr *XML_GetNodeAttr(struct xml_node *node, char *name){
struct xml_node_attr *iterator = node->attrs;
while(iterator != NULL){
if(strcmp(iterator->name, name) == 0)
return iterator;
iterator = iterator->next;
}
return NULL;
}
char *XML_GetNodeValue(struct xml_node *node){
if(node->value == NULL){
int len = node->end_pos - node->start_pos - 1;
char *buffer =(char*)malloc(len);
memcpy(buffer, &xml_buffer[node->start_pos], len);
buffer[len] = '\0';
node->value = buffer;
}
return node->value;
}
void XML_RecursiveFreeNode(xml_node *node){
if(node->child)
XML_RecursiveFreeNode(node->child);
if(node->next)
XML_RecursiveFreeNode(node->next);
free(node);
node = NULL;
}
//! Liberar la memoria ocupada por xml_buffer
void XML_EndParse(char free_tree){
free(xml_buffer);
if(free_tree)
XML_RecursiveFreeNode(main_tree);
main_tree = current_node = NULL;
}
(Don't expect to find any OpenPStore here, as it is only a .xml parser)
2- Final GUI design of OpenPStore (Not a pic of a ps3, but from a PC. Though PS3 is exactly the same):
It will come in multiple colors, with an autochanger (to random color) feature.
If you want to I can keep you updated. JFW is real, and we are putting all our effort into it. Do not trust any fake release/leak! I don't know if the brick thing is true, but having seen all the work which has been done here, I would just trust it and not mess around.
Nobody is going to brick nobody's console unless someone leaks the JFW. And, even if it is leaked, if you don't use the leaked beta, you dont' have to worry about anything. And ofcourse, the final release won't have this anti-leak feature.
I also have to say thanks to everyone of you who do trust in us and give us support, as support and opinions is our only pay back for the work
Blipi
PS: If it was for me, I would translate JFW and it's homebrew to English and more languages, but as I am not the only one who works in this project, I don't know when English support will come or whether it will come or not. Sorry.
PS2: For those claiming evidence... Beta will be here soon, just wait. You cant trust us or not. I know what I'm doing, and I do know that it is real. I don't even have a ps3 to test OpenPStore too, and I have to keep asking for testers. More than 5 people have already tried OpenPStore, and every one of them could tell you that it is real.
"The estimated date for the publication of the JFW-DH is October 1, 2011"
We're probably gonna have 3.80 firmware by then. and 3.60 custom firmware should defo be out by then.