› Foros › PlayStation 3 › Modchips y Softmods
TSC escribió:que payload utilizas para entrar en modo jailbreak? He buscado en google, y gente que le ha salido ese error, instalando la v4b de Hermes le ha valido.
Si no, me temo que te tocará formatear el Disco Duro para reestablecer ajustes
dt_loky escribió:Hola, haber si alguien me ayuda.
Tengo una play 3 con fireware 3.50 y quiero saber como hago el downgrade a 3.41 para que me pueda leer los juegos backups, este es modelo slim.
Ahora tengo un pincho PIC (hermes del pincho v4b).
Ya tengo estos programas los pongo haber si sirven, tengan encuenta que soy nuevo y mucho no entiendo, lei mucho pero la verdad se me mezcla todo.
Microchip.BootLoader.USB.HID.v2.6b ( este segun me dijeron es para usar con el pincho )
PSGrooPIC_BEEPIC_FW341_DEF.hex
PSGrooPIC_V1.7a_wBTL_FW3.41.hex
( Estos hex son los que se usan con el programa Microchip , ahora se como usar el programa pero no se en que orden usar los HEX esos que tengo o si serviran )
Luego baje estos programas de este hilo :
PSGradePIC_wBTL_PICDEM
PSGradePIC_wBTL
PSGradePIC_nBTL
Actualizacion 3.41
Actualizacion 3.15
PENDRIVER
La maquina la compro como viene de fabrica hace 5 dias.
Tambien tengo el OM 2.1 i2 para ponercelo
En donde habla de paso 1, el pincho yo ya lo tengo igual lo tengo que flashear? el pincho es comprado, igualmente si hay que flashearlo me explicas como se hace.
Como pongo la ps3 en modo factory?
Gracias esas son mis dudas
guillew777 escribió:no entiendo muy bien esto, funciona con ps3break pic 1.0 , se podran jugar juegos q requieran firmware 3.42 o 3.50?
LeiSure escribió:guillew777 escribió:no entiendo muy bien esto, funciona con ps3break pic 1.0 , se podran jugar juegos q requieran firmware 3.42 o 3.50?
NO. Es para bajar de versión la PS3 a la 3.41
¿Has leído algo?
guillew777 escribió:no, la verdad no tengo mucho tiempo para leer, gracias por responder
TSC escribió:Voto esa respuesta para respuesta del año... increible ¿no se puede reportar por esto?
TSC escribió:Muchas gracias! Ahora actualizo el primer post. Solo una cosa, ahora mismo, que dongle_id fuerza?
TSC escribió:Otra duda, perdona... Lo genera cada vez que compilas, o cada vez que ejecuta?
gracias again
jhonsay escribió:Hola Noltari, he descargado el .rar y me dispongo a grabar el PSGradePIC_nBTL.hex ya que yo no tengo bootloader, programo directamente a pelo sobre el pic. Luego monto sobre la board de el semi y conecto en el usb mas alejado del lector. Es una FAT de 40GB con firm 2.55 , parpadea un par d veces pero la consola se inicia normalmente y se queda en el menú pidiendo que seleccione usuario, en vez de apagarse la pantalla durante esos 7 min. aprox. . Estoy haciendo algo mal? Gracias.
Por cierto yo uso 18F2455. Gracias.
josete2k escribió:El USB es indiferente en el proceso de jail/grade.
s32 main(s32 argc, const char* argv[])
{
GusEngine::initialize(32, 64, (char*)"/dev_hdd0/game/GUSENGINE/USRDIR/content/"); //memoria vertices, memoria grafica, directorio de contenido
basicObject* layeredGhost = new basicObject((char*)"ghost.png", 128, 128, 300, 250); //archivo de imagen, width, height, x, y
layeredGhost->layer = 3;
GusEngine::addObject(layeredGhost, -1); //el objeto a añadir, ID del objeto
basicObject* loadedGhosts[5000];
basicObject* theGhost;
int gh = 0;
int cnt = 0;
for(int x = 0; x < 800; x+= 16)
{
for(int y = 0; y < 500; y+= 16)
{
theGhost = new basicObject((char*)"ghost.png", 32, 32, 16 + x, 16 + y);
theGhost->layer = 1;
loadedGhosts[cnt] = theGhost;
GusEngine::addObject(theGhost, cnt++);
}
}
int i;
while(1)
{
GusEngine::beginFrame();
for(i = 0; i < MAX_PADS; i++){
if(GusEngine::padInfo.status[i]){
if(GusEngine::padData[i].BTN_CROSS)
return 0;
else if(GusEngine::padData[i].BTN_CIRCLE)
{
gh++;
theGhost = new basicObject((char*)"ghost.png", 32, 32, 16 + (32 * gh), 16 + (32 * gh));
theGhost->modulateColor = true;
theGhost->modulationColor.a = 1;
theGhost->modulationColor.r = gh / 10.0f;
theGhost->modulationColor.g = gh / 5.0f;
theGhost->modulationColor.b = gh / 6.0f;
theGhost->layer = 2;
GusEngine::addObject(theGhost, gh);
}
else if(GusEngine::padData[i].BTN_SQUARE)
layeredGhost->layer += 0.1f;
}
}
for(int buc = 0; buc < cnt; buc++)
loadedGhosts[buc]->rotation += GusEngine::lastFrameTime * PI_F / 1000;
GusEngine::endFrame();
}
GusEngine::clear(true, true);
}
por Noltari Hoy 11:00
jhonsay escribió:
Hola Noltari, he descargado el .rar y me dispongo a grabar el PSGradePIC_nBTL.hex ya que yo no tengo bootloader, programo directamente a pelo sobre el pic. Luego monto sobre la board de el semi y conecto en el usb mas alejado del lector. Es una FAT de 40GB con firm 2.55 , parpadea un par d veces pero la consola se inicia normalmente y se queda en el menú pidiendo que seleccione usuario, en vez de apagarse la pantalla durante esos 7 min. aprox. . Estoy haciendo algo mal? Gracias.
Por cierto yo uso 18F2455. Gracias.
¿Haces la combinaión de Power + Eject y lo pones en el USB de más a la derecha como si se tratara de un jailbreak normal?
josete2k escribió:Tienes un MP
Noltari escribió:josete2k escribió:Tienes un MP
https://github.com/Noltari/PSGrade :3
Source Download: http://github.com/Noltari/PSGrade/zipball/master
/*
PSGrade
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <LUFA/Version.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/CDC.h>
#include "key.h"
#include "hmac.h"
#include "random.c"
#define RED (LEDS_LED1)
#define GREEN (LEDS_LED2)
#define BOTH (RED|GREEN)
#define NONE (LEDS_NO_LEDS)
#define LED(x) LEDs_SetAllLEDs(x)
#define PORT_EMPTY 0x0100 /* powered only */
#define PORT_FULL 0x0103 /* connected, enabled, powered, full-speed */
#define C_PORT_CONN 0x0001 /* connection */
#define C_PORT_RESET 0x0010 /* reset */
#define C_PORT_NONE 0x0000 /* no change */
#define CHALLENGE_INDEX 7
#define SHA1_DIGESTSIZE 20
uint16_t port_status[6] = { PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY };
uint16_t port_change[6] = { C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE };
enum {
init,
wait_hub_ready,
hub_ready,
p5_wait_reset,
p5_wait_enumerate,
p5_challenged,
p5_responded,
p5_wait_disconnect,
p5_disconnected,
done,
} state = init;
uint8_t hub_int_response = 0x00;
uint8_t hub_int_force_data0 = 0;
int last_port_conn_clear = 0;
int last_port_reset_clear = 0;
int8_t port_addr[7] = { -1, -1, -1, -1, -1, -1, -1 };
int8_t port_cur = -1;
void USB_Device_SetDeviceAddress(uint8_t Address)
{
port_addr[port_cur] = Address & 0x7f;
UDADDR = Address & 0x7f;
UDADDR |= (1 << ADDEN);
}
void switch_port(int8_t port)
{
if (port_cur == port) return;
port_cur = port;
if (port_addr[port] < 0)
port_addr[port] = 0;
UDADDR = port_addr[port] & 0x7f;
UDADDR |= (1 << ADDEN);
}
volatile uint8_t expire = 0; /* counts down every 10 milliseconds */
volatile uint32_t ispcount=2000; /*counts down for auto enter isp mode*/
uint8_t isptrig;
ISR(TIMER1_OVF_vect)
{
uint16_t rate = (uint16_t) -(F_CPU / 64 / 100);
TCNT1H = rate >> 8;
TCNT1L = rate & 0xff;
if (expire > 0)
expire--;
if(ispcount > 0)
ispcount--;
else
if(isptrig) {LED(GREEN);((void (*)(void))0x1800)();} /*salto a la pos 0x1800 donde está el bootloader en el at90usb162*/
}
void panic(int led1, int led2)
{
for(;;) {
_delay_ms(100);
LED(led1);
_delay_ms(100);
LED(led2);
}
}
void HUB_Task(void)
{
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed())
{
if (hub_int_response) {
if (hub_int_force_data0) {
Endpoint_ResetDataToggle();
hub_int_force_data0 = 0;
}
Endpoint_Write_Byte(hub_int_response);
Endpoint_ClearIN();
hub_int_response = 0x00;
}
}
}
void JIG_Task(void)
{
static int bytes_out = 0, bytes_in = 0;
Endpoint_SelectEndpoint(2);
if (Endpoint_IsReadWriteAllowed())
{
Endpoint_Read_Stream_LE(&jig_challenge[bytes_out], 8, NO_STREAM_CALLBACK) ;
Endpoint_ClearOUT();
bytes_out += 8;
if (bytes_out >= 64) {
//Generate random seed from AVR timer.
srand(jig_challenge[7] + jig_challenge[8]); // As there is no function to get the time from the AVR we use the two first random chars from the jig_challenge as a seed.
//Get a random dongle_id, based off the seed generated with the AVR timer.
dongle_id[0] = rand();
dongle_id[1] = rand();
//Check dongle_id. If it should be revoked a new one is generated.
int i;
for(i = 0; i < sizeof(usb_dongle_revoke_list); i++) {
if(usb_dongle_revoke_list[i] == (((dongle_id[0] << 8) & 0xFF) & (dongle_id[1] & 0xFF)) ) {
i = 0;
dongle_id[0] = rand();
dongle_id[1] = rand();
}
}
//Generate the jig_response.
jig_response[0] = 0x00;
jig_response[1] = 0x00;
jig_response[2] = 0xFF;
jig_response[3] = 0x00;
jig_response[4] = 0x2E;
jig_response[5] = 0x02;
jig_response[6] = 0x02;
jig_response[7] = dongle_id[0];
jig_response[8] = dongle_id[1];
//Generate usb_dongle_key from usb_dongle_master_key and dongle_id.
HMACInit(usb_dongle_master_key, SHA1_DIGESTSIZE);
HMACBlock(dongle_id, sizeof(dongle_id));
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
usb_dongle_key[i] = hmacdigest[i];
}
//Generate jig_response.
HMACInit(usb_dongle_key, SHA1_DIGESTSIZE);
HMACBlock(jig_challenge + CHALLENGE_INDEX, SHA1_DIGESTSIZE);
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
jig_response[CHALLENGE_INDEX + sizeof(dongle_id) + i] = hmacdigest[i];
}
state = p5_challenged;
expire = 50; // was 90
}
}
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed() && state == p5_challenged && expire == 0)
{
if ( bytes_in < 64) {
Endpoint_Write_Stream_LE(&jig_response[bytes_in], 8, NO_STREAM_CALLBACK);
Endpoint_ClearIN();
bytes_in += 8;
if ( bytes_in >= 64) {
state = p5_responded;
expire = 50;
}
}
}
}
void connect_port(int port)
{
last_port_reset_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_FULL;
port_change[port - 1] = C_PORT_CONN;
}
void disconnect_port(int port)
{
last_port_conn_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_EMPTY;
port_change[port - 1] = C_PORT_CONN;
}
void SetupHardware(void)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
wdt_disable();
/* Disable clock division */
clock_prescale_set(clock_div_1);
/* Setup timer */
TCCR1B = 0x03; /* timer rate clk/64 */
TIMSK1 = 0x01;
/* Hardware Initialization */
LEDs_Init();
USB_Init();
sei();
}
int main(void)
{
isptrig=1;
ispcount=2000;
SetupHardware();
LED(~GREEN);
state = init;
switch_port(5);
for (;;)
{
if (port_cur == 0)
HUB_Task();
if (port_cur == 5)
JIG_Task();
USB_USBTask();
//connect 5
if (state == hub_ready && expire == 0)
{
connect_port(5);
state = p5_wait_reset;
}
if (state == p5_wait_reset && last_port_reset_clear == 5)
{
switch_port(5);
state = p5_wait_enumerate;
}
// disconnect 5
if (state == p5_responded && expire == 0)
{
switch_port(0);
disconnect_port(5);
state = p5_wait_disconnect;
}
if (state == p5_wait_disconnect && last_port_conn_clear == 5)
{
state = p5_disconnected;
expire = 20;
}
// done
if (state == p5_disconnected && expire == 0)
{
isptrig=0;/*stop enter isp mode*/
LED(GREEN);
break;
}
}
}
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex,
const void** const DescriptorAddress)
{
const uint8_t DescriptorType = (wValue >> 8);
void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
{
case DTYPE_Device:
switch (port_cur) {
case 0:
Address = (void *) HUB_Device_Descriptor;
Size = sizeof(HUB_Device_Descriptor);
break;
case 5:
Address = (void *) port5_device_descriptor;
Size = sizeof(port5_device_descriptor);
break;
}
break;
case DTYPE_Configuration:
switch (port_cur) {
case 0:
Address = (void *) HUB_Config_Descriptor;
Size = sizeof(HUB_Config_Descriptor);
break;
case 5:
// 1 config
Address = (void *) port5_config_descriptor;
Size = sizeof(port5_config_descriptor);
break;
}
break;
case 0x29: // HUB descriptor (always to port 0 we'll assume)
switch (port_cur) {
case 0:
Address = (void *) HUB_Hub_Descriptor;
Size = sizeof(HUB_Hub_Descriptor);
break;
}
break;
}
*DescriptorAddress = Address;
return Size;
}
void EVENT_USB_Device_Connect(void) { }
void EVENT_USB_Device_Disconnect(void) { }
void EVENT_USB_Device_UnhandledControlRequest(void)
{
if (port_cur == 5 && USB_ControlRequest.bRequest == REQ_SetInterface)
{
/* can ignore this */
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA0 &&
USB_ControlRequest.bRequest == 0x00 && // GET HUB STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wIndex == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(0x0000); // wHubStatus
Endpoint_Write_Word_LE(0x0000); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA3 &&
USB_ControlRequest.bRequest == 0x00 && // GET PORT STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(port_status[p - 1]); // wHubStatus
Endpoint_Write_Word_LE(port_change[p - 1]); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x03 && // SET_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0008: // PORT_POWER
if (p == 6 && state == init) {
/* after the 6th port is powered, wait a bit and continue */
state = hub_ready;
expire = 15;
}
break;
case 0x0004: // PORT_RESET
hub_int_response = (1 << p);
port_change[p - 1] |= C_PORT_RESET;
break;
}
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x01 && // CLEAR_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0010: // C_PORT_CONNECTION
last_port_conn_clear = p;
port_change[p - 1] &= ~C_PORT_CONN;
break;
case 0x0014: // C_PORT_RESET
last_port_reset_clear = p;
port_change[p - 1] &= ~C_PORT_RESET;
break;
}
return;
}
panic(RED, GREEN);
}
void EVENT_USB_Device_ConfigurationChanged(void)
{
/* careful with endpoints: we don't reconfigure when "switching ports"
so we need the same configuration on all of them */
if (!Endpoint_ConfigureEndpoint(1, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
if (!Endpoint_ConfigureEndpoint(2, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
}
void EVENT_USB_Device_Suspend(void) { }
void EVENT_USB_Device_WakeUp(void) { }
void EVENT_USB_Device_Reset(void) { }
void EVENT_USB_Device_StartOfFrame(void) { }
void EVENT_USB_InitFailure(const uint8_t ErrorCode) { }
void EVENT_USB_UIDChange(void) {}
josete2k escribió:Noltari escribió:josete2k escribió:Tienes un MP
https://github.com/Noltari/PSGrade :3
Source Download: http://github.com/Noltari/PSGrade/zipball/master
Mola no se si cambia el ID o no... el libusb-win32 me da siempre el mismo ID.
autoDFU añadido:/*
PSGrade
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <LUFA/Version.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/CDC.h>
#include "key.h"
#include "hmac.h"
#include "random.c"
#define RED (LEDS_LED1)
#define GREEN (LEDS_LED2)
#define BOTH (RED|GREEN)
#define NONE (LEDS_NO_LEDS)
#define LED(x) LEDs_SetAllLEDs(x)
#define PORT_EMPTY 0x0100 /* powered only */
#define PORT_FULL 0x0103 /* connected, enabled, powered, full-speed */
#define C_PORT_CONN 0x0001 /* connection */
#define C_PORT_RESET 0x0010 /* reset */
#define C_PORT_NONE 0x0000 /* no change */
#define CHALLENGE_INDEX 7
#define SHA1_DIGESTSIZE 20
uint16_t port_status[6] = { PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY };
uint16_t port_change[6] = { C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE };
enum {
init,
wait_hub_ready,
hub_ready,
p5_wait_reset,
p5_wait_enumerate,
p5_challenged,
p5_responded,
p5_wait_disconnect,
p5_disconnected,
done,
} state = init;
uint8_t hub_int_response = 0x00;
uint8_t hub_int_force_data0 = 0;
int last_port_conn_clear = 0;
int last_port_reset_clear = 0;
int8_t port_addr[7] = { -1, -1, -1, -1, -1, -1, -1 };
int8_t port_cur = -1;
void USB_Device_SetDeviceAddress(uint8_t Address)
{
port_addr[port_cur] = Address & 0x7f;
UDADDR = Address & 0x7f;
UDADDR |= (1 << ADDEN);
}
void switch_port(int8_t port)
{
if (port_cur == port) return;
port_cur = port;
if (port_addr[port] < 0)
port_addr[port] = 0;
UDADDR = port_addr[port] & 0x7f;
UDADDR |= (1 << ADDEN);
}
volatile uint8_t expire = 0; /* counts down every 10 milliseconds */
volatile uint32_t ispcount=2000; /*counts down for auto enter isp mode*/
uint8_t isptrig;
ISR(TIMER1_OVF_vect)
{
uint16_t rate = (uint16_t) -(F_CPU / 64 / 100);
TCNT1H = rate >> 8;
TCNT1L = rate & 0xff;
if (expire > 0)
expire--;
if(ispcount > 0)
ispcount--;
else
if(isptrig) {LED(GREEN);((void (*)(void))0x1800)();} /*salto a la pos 0x1800 donde está el bootloader en el at90usb162*/
}
void panic(int led1, int led2)
{
for(;;) {
_delay_ms(100);
LED(led1);
_delay_ms(100);
LED(led2);
}
}
void HUB_Task(void)
{
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed())
{
if (hub_int_response) {
if (hub_int_force_data0) {
Endpoint_ResetDataToggle();
hub_int_force_data0 = 0;
}
Endpoint_Write_Byte(hub_int_response);
Endpoint_ClearIN();
hub_int_response = 0x00;
}
}
}
void JIG_Task(void)
{
static int bytes_out = 0, bytes_in = 0;
Endpoint_SelectEndpoint(2);
if (Endpoint_IsReadWriteAllowed())
{
Endpoint_Read_Stream_LE(&jig_challenge[bytes_out], 8, NO_STREAM_CALLBACK) ;
Endpoint_ClearOUT();
bytes_out += 8;
if (bytes_out >= 64) {
//Generate random seed from AVR timer.
srand(jig_challenge[7] + jig_challenge[8]); // As there is no function to get the time from the AVR we use the two first random chars from the jig_challenge as a seed.
//Get a random dongle_id, based off the seed generated with the AVR timer.
dongle_id[0] = rand();
dongle_id[1] = rand();
//Check dongle_id. If it should be revoked a new one is generated.
int i;
for(i = 0; i < sizeof(usb_dongle_revoke_list); i++) {
if(usb_dongle_revoke_list[i] == (((dongle_id[0] << 8) & 0xFF) & (dongle_id[1] & 0xFF)) ) {
i = 0;
dongle_id[0] = rand();
dongle_id[1] = rand();
}
}
//Generate the jig_response.
jig_response[0] = 0x00;
jig_response[1] = 0x00;
jig_response[2] = 0xFF;
jig_response[3] = 0x00;
jig_response[4] = 0x2E;
jig_response[5] = 0x02;
jig_response[6] = 0x02;
jig_response[7] = dongle_id[0];
jig_response[8] = dongle_id[1];
//Generate usb_dongle_key from usb_dongle_master_key and dongle_id.
HMACInit(usb_dongle_master_key, SHA1_DIGESTSIZE);
HMACBlock(dongle_id, sizeof(dongle_id));
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
usb_dongle_key[i] = hmacdigest[i];
}
//Generate jig_response.
HMACInit(usb_dongle_key, SHA1_DIGESTSIZE);
HMACBlock(jig_challenge + CHALLENGE_INDEX, SHA1_DIGESTSIZE);
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
jig_response[CHALLENGE_INDEX + sizeof(dongle_id) + i] = hmacdigest[i];
}
state = p5_challenged;
expire = 50; // was 90
}
}
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed() && state == p5_challenged && expire == 0)
{
if ( bytes_in < 64) {
Endpoint_Write_Stream_LE(&jig_response[bytes_in], 8, NO_STREAM_CALLBACK);
Endpoint_ClearIN();
bytes_in += 8;
if ( bytes_in >= 64) {
state = p5_responded;
expire = 50;
}
}
}
}
void connect_port(int port)
{
last_port_reset_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_FULL;
port_change[port - 1] = C_PORT_CONN;
}
void disconnect_port(int port)
{
last_port_conn_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_EMPTY;
port_change[port - 1] = C_PORT_CONN;
}
void SetupHardware(void)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
wdt_disable();
/* Disable clock division */
clock_prescale_set(clock_div_1);
/* Setup timer */
TCCR1B = 0x03; /* timer rate clk/64 */
TIMSK1 = 0x01;
/* Hardware Initialization */
LEDs_Init();
USB_Init();
sei();
}
int main(void)
{
isptrig=1;
ispcount=2000;
SetupHardware();
LED(~GREEN);
state = init;
switch_port(5);
for (;;)
{
if (port_cur == 0)
HUB_Task();
if (port_cur == 5)
JIG_Task();
USB_USBTask();
//connect 5
if (state == hub_ready && expire == 0)
{
connect_port(5);
state = p5_wait_reset;
}
if (state == p5_wait_reset && last_port_reset_clear == 5)
{
switch_port(5);
state = p5_wait_enumerate;
}
// disconnect 5
if (state == p5_responded && expire == 0)
{
switch_port(0);
disconnect_port(5);
state = p5_wait_disconnect;
}
if (state == p5_wait_disconnect && last_port_conn_clear == 5)
{
state = p5_disconnected;
expire = 20;
}
// done
if (state == p5_disconnected && expire == 0)
{
isptrig=0;/*stop enter isp mode*/
LED(GREEN);
break;
}
}
}
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex,
const void** const DescriptorAddress)
{
const uint8_t DescriptorType = (wValue >> 8);
void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
{
case DTYPE_Device:
switch (port_cur) {
case 0:
Address = (void *) HUB_Device_Descriptor;
Size = sizeof(HUB_Device_Descriptor);
break;
case 5:
Address = (void *) port5_device_descriptor;
Size = sizeof(port5_device_descriptor);
break;
}
break;
case DTYPE_Configuration:
switch (port_cur) {
case 0:
Address = (void *) HUB_Config_Descriptor;
Size = sizeof(HUB_Config_Descriptor);
break;
case 5:
// 1 config
Address = (void *) port5_config_descriptor;
Size = sizeof(port5_config_descriptor);
break;
}
break;
case 0x29: // HUB descriptor (always to port 0 we'll assume)
switch (port_cur) {
case 0:
Address = (void *) HUB_Hub_Descriptor;
Size = sizeof(HUB_Hub_Descriptor);
break;
}
break;
}
*DescriptorAddress = Address;
return Size;
}
void EVENT_USB_Device_Connect(void) { }
void EVENT_USB_Device_Disconnect(void) { }
void EVENT_USB_Device_UnhandledControlRequest(void)
{
if (port_cur == 5 && USB_ControlRequest.bRequest == REQ_SetInterface)
{
/* can ignore this */
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA0 &&
USB_ControlRequest.bRequest == 0x00 && // GET HUB STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wIndex == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(0x0000); // wHubStatus
Endpoint_Write_Word_LE(0x0000); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA3 &&
USB_ControlRequest.bRequest == 0x00 && // GET PORT STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(port_status[p - 1]); // wHubStatus
Endpoint_Write_Word_LE(port_change[p - 1]); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x03 && // SET_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0008: // PORT_POWER
if (p == 6 && state == init) {
/* after the 6th port is powered, wait a bit and continue */
state = hub_ready;
expire = 15;
}
break;
case 0x0004: // PORT_RESET
hub_int_response = (1 << p);
port_change[p - 1] |= C_PORT_RESET;
break;
}
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x01 && // CLEAR_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0010: // C_PORT_CONNECTION
last_port_conn_clear = p;
port_change[p - 1] &= ~C_PORT_CONN;
break;
case 0x0014: // C_PORT_RESET
last_port_reset_clear = p;
port_change[p - 1] &= ~C_PORT_RESET;
break;
}
return;
}
panic(RED, GREEN);
}
void EVENT_USB_Device_ConfigurationChanged(void)
{
/* careful with endpoints: we don't reconfigure when "switching ports"
so we need the same configuration on all of them */
if (!Endpoint_ConfigureEndpoint(1, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
if (!Endpoint_ConfigureEndpoint(2, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
}
void EVENT_USB_Device_Suspend(void) { }
void EVENT_USB_Device_WakeUp(void) { }
void EVENT_USB_Device_Reset(void) { }
void EVENT_USB_Device_StartOfFrame(void) { }
void EVENT_USB_InitFailure(const uint8_t ErrorCode) { }
void EVENT_USB_UIDChange(void) {}
josete2k escribió:autoDFU añadido:
Noltari escribió:jhonsay escribió:Hola Noltari, he descargado el .rar y me dispongo a grabar el PSGradePIC_nBTL.hex ya que yo no tengo bootloader, programo directamente a pelo sobre el pic. Luego monto sobre la board de el semi y conecto en el usb mas alejado del lector. Es una FAT de 40GB con firm 2.55 , parpadea un par d veces pero la consola se inicia normalmente y se queda en el menú pidiendo que seleccione usuario, en vez de apagarse la pantalla durante esos 7 min. aprox. . Estoy haciendo algo mal? Gracias.
Por cierto yo uso 18F2455. Gracias.
¿Haces la combinaión de Power + Eject y lo pones en el USB de más a la derecha como si se tratara de un jailbreak normal?
kiris escribió:e echo todo lo del tutorial y perfecto, pero despues de actualizalo a la 3.41 e puesto la pelicula del padrino en blue ray y si arranco y dije cual es el problema pues? una ves con PIC puesto la reproduci y nadamas se veia en verde eso es el problema del video? y se arregla solo quitando el pic?
jhonsay escribió:Noltari escribió:jhonsay escribió:Hola Noltari, he descargado el .rar y me dispongo a grabar el PSGradePIC_nBTL.hex ya que yo no tengo bootloader, programo directamente a pelo sobre el pic. Luego monto sobre la board de el semi y conecto en el usb mas alejado del lector. Es una FAT de 40GB con firm 2.55 , parpadea un par d veces pero la consola se inicia normalmente y se queda en el menú pidiendo que seleccione usuario, en vez de apagarse la pantalla durante esos 7 min. aprox. . Estoy haciendo algo mal? Gracias.
Por cierto yo uso 18F2455. Gracias.
¿Haces la combinaión de Power + Eject y lo pones en el USB de más a la derecha como si se tratara de un jailbreak normal?
Los esquemas que utilizo para la Board, son estos:
http://img708.imageshack.us/i/14bootloader.png/
No sé que estoy haciendo mal...alguien me exa un cable?
jhonsay escribió:Hola, ya está solucionado, el problema era la board !!! no estaba como en el esquema, funciona para hacer psgroove pero no para hacer psgrade, así que si alguien tiene el mismo problema, que monte una placa en condiciones que halla sido testeada por alguien antes y listo. La que puse en el anterior post FUNCIONA 100%, probada en PS3 FAT 60GB version 3.50.
En cambio en la PS3 FAT 40GB version 3.55 entra en modo-servicio pero cuando enciendo con el pendrive con los archivos dentro en el puerto mas cercano al lector, no los lee e inicia la consola normalmente. Podría intentar actualizar a pelo metiendo el firm 3.15 en PSE/UPDATE ?? gracias...
Noltari escribió:jhonsay escribió:Hola, ya está solucionado, el problema era la board !!! no estaba como en el esquema, funciona para hacer psgroove pero no para hacer psgrade, así que si alguien tiene el mismo problema, que monte una placa en condiciones que halla sido testeada por alguien antes y listo. La que puse en el anterior post FUNCIONA 100%, probada en PS3 FAT 60GB version 3.50.
En cambio en la PS3 FAT 40GB version 3.55 entra en modo-servicio pero cuando enciendo con el pendrive con los archivos dentro en el puerto mas cercano al lector, no los lee e inicia la consola normalmente. Podría intentar actualizar a pelo metiendo el firm 3.15 en PSE/UPDATE ?? gracias...
En la 3.55 el archivo para el downgrade fue metido en una lista negra y NO FUNCIONA.
indurein escribió:Se puede seguir juegando online con el firm 3.50 y las DNS cambiadas?? Gracias de antemano
kiris escribió:kiris escribió:e echo todo lo del tutorial y perfecto, pero despues de actualizalo a la 3.41 e puesto la pelicula del padrino en blue ray y si arranco y dije cual es el problema pues? una ves con PIC puesto la reproduci y nadamas se veia en verde eso es el problema del video? y se arregla solo quitando el pic?
x2
kiris escribió:kiris escribió:kiris escribió:e echo todo lo del tutorial y perfecto, pero despues de actualizalo a la 3.41 e puesto la pelicula del padrino en blue ray y si arranco y dije cual es el problema pues? una ves con PIC puesto la reproduci y nadamas se veia en verde eso es el problema del video? y se arregla solo quitando el pic?
x2
x3
Sasisimo escribió:Hola a todos. Tengo una PS3 Fat 3.50. Os explico lo que hice:
Carge en mi pic el HexPSGrave.
Formatee un pen en Fat32 desde windows y le meti el Lv2diag.self del paso 1 en la raiz junto con la actualizacion 3.15 con este nombre (ps3os_v3_15_PS3UPDAT.PUP)
Despues, meti mi pinopic en el puerto usb mas alejado del lector, encendi la consola con power+eject y enseguida se apago (hasta aqui todo correcto)
Despues, meti el usb con los 2 archivos en el puerto usb mas proximo al lector y encendi la consola....empezo a parpadear el led verde sin parar y espere unos 10 minutos....pero no pasaba nada, asi que apage la consola desde el botos trasero de la corriente y la volvi a encender y fue a partir de ahi cuando empezo el calvario.
La consola la encendia y se apagaba al momento sola.
Volvi a formatear el usb, meti el Lv2diag.self del paso 1 y le meti tambien en esta ocasion la version 3.41 del tuto.
Volvi a hacer lo mismo, pero en esta ocasion no parpadeaba el led, si no que se quedo fijo (como tiene que ser en teoria no??) tras varios minutos no aparecia nada en la pantalla y de repente el led volvia a parpadear asi, que tras un buen rato, tuve que volver a apagarla.
Bien, no se que es lo que puedo probar a hacer ahora...puede ser que con la version 3.15 de antes, al tener el nombre de (ps3os_v3_15_PS3UPDAT.PUP) se bloquease o algo???
Puede ser que la version 3.41 del tuto, no sea la fixed que hace falta y por eso quizas no termino de downgradearse???
Que es lo mejor que puedo hacer???
Espero vuestra ayuda.
Un saludo.
LeiSure escribió:Sasisimo escribió:Hola a todos. Tengo una PS3 Fat 3.50. Os explico lo que hice:
Carge en mi pic el HexPSGrave.
Formatee un pen en Fat32 desde windows y le meti el Lv2diag.self del paso 1 en la raiz junto con la actualizacion 3.15 con este nombre (ps3os_v3_15_PS3UPDAT.PUP)
Despues, meti mi pinopic en el puerto usb mas alejado del lector, encendi la consola con power+eject y enseguida se apago (hasta aqui todo correcto)
Despues, meti el usb con los 2 archivos en el puerto usb mas proximo al lector y encendi la consola....empezo a parpadear el led verde sin parar y espere unos 10 minutos....pero no pasaba nada, asi que apage la consola desde el botos trasero de la corriente y la volvi a encender y fue a partir de ahi cuando empezo el calvario.
La consola la encendia y se apagaba al momento sola.
Volvi a formatear el usb, meti el Lv2diag.self del paso 1 y le meti tambien en esta ocasion la version 3.41 del tuto.
Volvi a hacer lo mismo, pero en esta ocasion no parpadeaba el led, si no que se quedo fijo (como tiene que ser en teoria no??) tras varios minutos no aparecia nada en la pantalla y de repente el led volvia a parpadear asi, que tras un buen rato, tuve que volver a apagarla.
Bien, no se que es lo que puedo probar a hacer ahora...puede ser que con la version 3.15 de antes, al tener el nombre de (ps3os_v3_15_PS3UPDAT.PUP) se bloquease o algo???
Puede ser que la version 3.41 del tuto, no sea la fixed que hace falta y por eso quizas no termino de downgradearse???
Que es lo mejor que puedo hacer???
Espero vuestra ayuda.
Un saludo.
El archivo de la actualización tiene que llamarse PS3UPDATE. PUP
Lo pone en todos los tutos.