Control de usuario
Estadísticas
Miembros:
364.392
Online:
957
Hilos:
1.472.804
Mensajes:
27.966.534
Stats

Índice de foros Wii Softmods

[Hilo Oficial] uLoader v5.1E (Emulacion saves, DLC, Wiiware)

Foro dedicado a la carga de backups vía software (loaders, cIOS, etc.)

Moderadores: jamonazo2000, Petiso Carambanal

Hermes
MegaAdicto!!!
 
Mensajes: 11053
Registrado: 18 Ene 2003

Re:

Mensajepor Hermes 24 May 2010 23:21

josete2k escribió:El original es de Wiipower, el autor de Neogamma. Los parches WIP surgieron a raíz del New Super Mario, puesto que era la forma más rápida de añadir parches al vuelo (aunque el uLoader ya emulaba la BCA)


http://www.mediafire.com/?zjytnnjryyn


Código: Seleccionar todo
#include <gccore.h>
#include <string.h>
#include <stdlib.h>

u32 doltableoffset[64];
u32 doltablelength[64];
u32 doltableentries;

void wipreset()
{
   doltableentries = 0;
}

void wipregisteroffset(u32 dst, u32 len)
{
   doltableoffset[doltableentries] = dst;
   doltablelength[doltableentries] = len;
   doltableentries++;
}

void patchu8(u32 offset, u8 value)
{
   u32 i = 0;
   u32 tempoffset = 0;

   while ((doltablelength[i] <= offset-tempoffset) && (i+1 < doltableentries))
   {
      tempoffset+=doltablelength[i];
      i++;
   }
   if (offset-tempoffset < doltablelength[i])
   {
      *(u8 *)(offset-tempoffset+doltableoffset[i]) = value;
   }
}

void wipparsebuffer(u8 *buffer, u32 length)
// The buffer needs a 0 at the end to properly terminate the string functions
{
   u32 pos = 0;
   u32 offset;
   char buf[10];
   
   while (pos < length)
   {
      if ( *(char *)(buffer + pos) != '#' && *(char *)(buffer + pos) != ';' && *(char *)(buffer + pos) != 10 && *(char *)(buffer + pos) != 13 && *(char *)(buffer + pos) != 32 && *(char *)(buffer + pos) != 0 )
      {
         memcpy(buf, (char *)(buffer + pos), 8);
         buf[8] = 0;
         offset = strtol(buf,NULL,16);

         pos += (u32)strchr((char *)(buffer + pos), 32)-(u32)(buffer + pos) + 1;
         pos += (u32)strchr((char *)(buffer + pos), 32)-(u32)(buffer + pos) + 1;
         
         while (pos < length && *(char *)(buffer + pos) != 10 && *(char *)(buffer + pos) != 13 && *(char *)(buffer + pos) != 0)
         {
            memcpy(buf, (char *)(buffer + pos), 2);
            buf[2] = 0;
         
            patchu8(offset, strtol(buf,NULL,16));
            offset++;
            pos +=2;      
         }   
      }
      if (strchr((char *)(buffer + pos), 10) == NULL)
      {
         return;
      } else
      {
         pos += (u32)strchr((char *)(buffer + pos), 10)-(u32)(buffer + pos) + 1;
      }
   }
}



No, si el problema no es la rutina, si no que faltan dos rutinas por enlazar, como ha puesto Spaceman.

El GX hace lo que yo, solo que estúpidamente, carga el fichero wip para cada sección del dol [+risas] y se olvida de que se necesita ir actualizando una tabla con las distintas secciones, para luego proceder a parchear de una sola vez.

Yo lo que hago es cargar el fichero WIP con mucha anticipación, antes de proceder a la carga de los dol (para así liberar los dispositivos) y despues hacer lo que he descrito, que ahor asi que debe funcionar

Pajariyo
Avatar de usuario
Bataflauta
 
Mensajes: 7134
Registrado: 01 Feb 2010
Ubicación: Madriz

Mensajepor Pajariyo 25 May 2010 00:46

anda que has ido a fijarte en el mejor, el loader de los code dumps [+risas] [+risas] la depuración de código no es uno de sus fuertes, yo empecé usando el GX y desde que añadieron soporte NTFS cada revisión significa más code dumps [poraki]

la gente quejándose en gbafail de que no funcionan los wip, llegas tú y en "10 minutos" lo solucionas... y aún te pondrán a parir por copiar parte del código, arreglarlo y no pasárselo de vuelta en bandejita de plata y en inglés [poraki] [poraki]

en fin, que muchas gracias por todo lo que nos proporcionas Hermes, no solo ya por uLoader, sino por todos los conocimientos y explicaciones que vas dejando en cada post [oki]
Imagen
Wii 4.1E (PimpMyWii) + HBC 1.1.0 + Priiloader 0.7 + cIOS222 rev5.1 + uLoader 5.1E MOD + LaCie Mobile Disk 320GB

Imagen
PS2 FAT v9 + Free McBoot 1.8c + Open PS2 Loader 0.9 + Network Adaptor + HDD IDE 160 GB


Softmodii: La guía para modificar cualquier Wii fácil y rápidamente.

tomate
Avatar de usuario
Adicto
 
Mensajes: 447
Registrado: 29 Ago 2006
Ubicación: Zaragoza

Mensajepor tomate 25 May 2010 09:15

Y gracias a Spaceman Spiff y a todos los demas.

Hermes
MegaAdicto!!!
 
Mensajes: 11053
Registrado: 18 Ene 2003

Version 5.1

Mensajepor Hermes 25 May 2010 11:22

- Añadido dev/mload shadow engine. Para evitar la detección de los dispositivos en juegos como PoP, sin necesidad de parches

- Añadido soporte para ficheros . wip (añadir a la carpeta "codes" en la SD o USB. Ver el txt de la versión para mas informacion) (corregido)

- Eliminado el soporte para el puerto 1 USB (no funciona bien y no se donde está el problema XD)

- Corregida la lectura de DVD para chip puñeteros (dedicado a Spaceman Spiff [+risas])

-Añadida una actualización del cIOS Installer no necesaria desde uLoader (se añade para que otros loaders puedan ocultar "/dev/mload" abriendo "/dev/mload/OFF")

NOTAS:

-Subida la actualización de los fuentes de mload (4.1) con el cIOS 5.1 (¿suena lioso verdad? XD). Los cIOS v5 siguen siendo válidos, dado que uLoader no necesita la actualización 5.1 para trabajar normalmente. ¿Que por qué la actualización?. Pues como explico arriba, para dotar a otros desarrolladores de una forma "sencilla" de poder ocultar el dispositivo "/dev/mload", por que de la forma que lo hago yo, seguro que se lían ;)

- Como ya expliqué en la anterior version, el dispositivo /dev/usb2 ha sido cambiado por /dev/usb123. Como explico en los fuentes del instalador, un desarrollador puede buscar dicha cadena en sus módulos externos y cambiarla por otra de forma aleatoria (yo por el momento, no lo hago) y así evitar que "dev/usb123" sea detectado.

-La versión 5.1 de uLoader, tiene un modo específico para ocultar los dispositivos de fatffs_module cuando no se precisa hacer uso de la emulación FFS (es decir, cuando no se emulan los saves o cuando no se oculta la actualización del diario). De esta forma, se garantiza un mínimo impacto y en el funcionamiento y los dispositivos de los que hace uso el módulo, dejan de ser un problema desde dicho modo.

--------------------------------------------------------------------------------------------------------------------------


Pajariyo escribió:anda que has ido a fijarte en el mejor, el loader de los code dumps [+risas] [+risas] la depuración de código no es uno de sus fuertes, yo empecé usando el GX y desde que añadieron soporte NTFS cada revisión significa más code dumps [poraki]


Yo no entro en ese tipo de guerras: programar dos líneas es fácil, hacer un programa entero es bastante complicado, sobre todo si te tienes que basar en código extraño.

Pajariyo escribió:la gente quejándose en gbafail de que no funcionan los wip, llegas tú y en "10 minutos" lo solucionas... y aún te pondrán a parir por copiar parte del código, arreglarlo y no pasárselo de vuelta en bandejita de plata y en inglés [poraki] [poraki]

en fin, que muchas gracias por todo lo que nos proporcionas Hermes, no solo ya por uLoader, sino por todos los conocimientos y explicaciones que vas dejando en cada post [oki]


Bueno, voy a aprovechar tu comentario para decir unas cuantas cosas: lo pongo como spoiler para que el post no se vea demasiado largo, salvo para el que quiera leer el "tocho" XD

El otro día cierto señor aprovechaba para meterse con la estructuración de mi código y su legibilidad. Tambien se han metido con que si comento o no comento el fuente y yo en cierto sentido, cayo, pero se nota que el que habla, no tiene ni puñetera idea de lo que es éste mundillo y las dificultades a las que te tienes que enfrentar constantemente y que uno está aquí para hacer un trabajo y no para darselo todo mascado a quien se pierde en cuanto dobla dos esquinas. Y el que se ahoga en un vaso de agua, es que directamente no tiene el nivel para picar ese código y punto.

Para empezar, yo no soy programador profesional, ni he estudiado la carrera: soy autodidacta y lo que me suelo encontrar, son códigos sin comentar (o apenas sin comentar, si tengo suerte), con bugs de todo tipo, incluso a veces, se atragantan al compilador, sin explicación de uso (ejemplo de todo eso: libogc) y que en ocasiones como ayer, tengo que mirar el código por dentro para saber que se pretende hacer por fuera (o sea, si alguien ve 3 líneas sin comentar y ya se ha perdido, yo estoy acostumbrado a ver fuentes mucho mas tochos y en peores condiciones y no solo lo interpreto, si no que lo arreglo lo mejor que puedo).

Eso, cuando no tengo que hacer yo el código que es la mayoría de las ocasiones: a mí el código me brota de forma natural en mi cerebro, no tengo apenas que planificarlo porque las respuestas me vienen de forma natural y dentro del caos que otros puedan ver, yo veo un orden subyacente y en cierto sentido, me pasa como a los médicos, que tienen mala letra y entienden perfectamente la mala letra de los demás (lo cual no quita que uno se cabree al ver que el diagnostico del otro médico está equivocado en numerosas ocasiones y que me toque hacer mi trabajo y el suyo [+risas])

Eso si: yo he dedicado cierto esfuerzo a que personas novatas puedan tratar de entrar en éste mundillo con todas las facilidades posibles, pero una cosa es eso y otra cuando estás haciendo un código con cierta complejidad, bebiendo de otras partes a veces y con un trabajo que desborda a cualquiera, como para que encima te pidan que quede "bonito" y "masticao" [poraki]

Dicho esto, el sistema WIP entero, tiene un defecto de construcción que funciona gracias a unas casualidades y a unos trucos, pero la implementación no es óptima, y no me extraña que el de usbloader gx y otros, se hayan perdido. El tema es que lo que se trata de parchear, es una serie de bytes partiendo de un offset desde el dol.

Digamos que abres un dol con Winhex y buscas unos bytes en una determinada posición y los cambias. Pues eso es lo que se pretende hacer desde WIP, pero para hacerlo, en vez de usar el offset de fichero, se están usando una serie de referencias al segmento final de memoria. Para que esto funcione, te tienes que saltar tres secciones del dol y evidentemente, la longitud de las secciones deben dar lugar a una correspondencia con la posición de los bytes a parchear en el fichero.

O sea, que se obtiene el offset mediante un truco que si no lo comprendes, te llevará a errar, pero incluso comprendiéndolo, podría fallar por el método empleado ya que no usa el método correcto para hacerlo (que sería localizar el offset de inicio de lectura del main.dol e ir haciendo la referencia con respecto al offset de inicio de lectura de cada sección)

Por otro lado, el sistema de parcheo WIP tiene un problema subyacente y es que no se ha pensado correctamente para poder trabajar con dols alternativos. En mi caso (y en el de Neogamma, estoy seguro), se puede producir un doble parcheo en el dol principal y el dol alternativo y evidentemente, si el dol alternativo fuera mas de uno, eso podría dar lugar a resultados no adecuados.

Así que confiemos que no haya que hacer uso de WIP o que si se hace uso, se limite a parchear el main.dol y no otra cosa, por que si no me tocará meterle mano y añadir algo mas de sustancia para que los parches se apliquen de forma condicional (que sería lo lógico: esperar unos bytes y luego parchear)

Como puedes ver, no es solo una cosa de poder hacerlo en 10 minutos, es que además de interpretar lo que hace el código, tienes que interpretar lo que pensaba la persona que programó el código al hacer eso en base a cosas que tu ya sabes por experiencia y los pequeños detalles que vas observando (por experiencia de haber hecho eso infinitas veces XD).

Así que cuando alguien te llega y se queja de la tabulación del fuente o de otras chorradas, lo menos que puedes pensar es que estás harto de ver códigos fuentes de otras personas que son muchos peores y se supone que son profesionales o quieren serlo, o incluso código mas "ordenadito" pero que funciona como el culo y que tienes que ir a arreglarlo tu ( y a veces, después de haberte dado una currada que te cagas, el autor original pasa de ti y sigue a los suyo [+risas] ) y tiene guasa que gente que se pierde con tres líneas, te quieran mirar por encima del hombro como si tu fueras culpable de su ignorancia o yo que se [+risas] (se nota que no han trabajado desensamblando e interpretando el código... eso si que está en chino y no el C, aunque esté sin comentar [+risas] )

En fin, que hasta la polla estoy de picar código y pegarme con situaciones absurdas, y evidentemente, no soy perfecto y cometo errores, etc. pero me da un nosequé que los demás tampoco... (y algunos tienen peor excusa que yo) [poraki]


Saludos

jaalmagro
Avatar de usuario
Habitual
 
Mensajes: 87
Registrado: 27 May 2008

Mensajepor jaalmagro 25 May 2010 11:45

Gracias Hermes por esta enésima revisión. Nos haces la vida más sencilla a muchos :) Ah, y a mi también me encantan los detalles que ofreces de tu trabajo en cada post. Y que dure :)

Saludos

Dr.wOOx
Avatar de usuario
Adicto
 
Mensajes: 134
Registrado: 09 Nov 2005

Mensajepor Dr.wOOx 25 May 2010 11:46

Muchas gracias Hermes, por esta nueva versión, a por ella que voy ;)

Me he leido el tocho, para comprender un poquito mas como funciona uLoader, y no tiene despercidio la explicación, por eso siempre que puedas es de agradecer que expliques todo con ese nivel de detalle.

Ya se que comentas, que no hace falta actualizar a los cIOS 5.1, pero es ver un cIOS nuevo y entrarme las ganas de meterselo a la Wii, pero de momento intentare contenerme.

Un Saludo y nuevamente gracias por este pedazo de cargador.
:: Wii 4.1E; HBC 1.0.8; BootMii beta 6 (1.3) IOS; Priiloader 0.6; cIOS Waninkoko rev.19; cIOS Hermes rev.5.1; cIOS 202 rev.1.1; IOS 58 Oficial ::

kkolat
Avatar de usuario
Adicto
 
Mensajes: 106
Registrado: 25 Oct 2006

Mensajepor kkolat 25 May 2010 13:15

Hermes muchas gracias por esta nueva version de uloader.
Comentarte que la emulacion de wiiware ha dejado de funcionar o al menos es lo que parece. Mis wiiwares instalados que funcionaban con uloader 5.0c no funcionan con 5.1.Acaso seria necesario actualizar los cios a la version 5.1 para que funcionen correctamente?
Cuando cargo cualquier juegos de wiiware aparece un code dump...
Ultima edición por kkolat el 25 May 2010 13:20, editado 1 vez

Pajariyo
Avatar de usuario
Bataflauta
 
Mensajes: 7134
Registrado: 01 Feb 2010
Ubicación: Madriz

Mensajepor Pajariyo 25 May 2010 13:19

A probar se ha dicho!!! [oki]

Por cierto, por alusiones [+risas]

Hermes escribió:me pasa como a los médicos, que tienen mala letra y entienden perfectamente la mala letra de los demás (lo cual no quita que uno se cabree al ver que el diagnostico del otro médico está equivocado en numerosas ocasiones y que me toque hacer mi trabajo y el suyo [+risas])

Eso no es del todo cierto, que algunos médicos no es que tengan mala letra, es que directamente escriben rayajos ininteligibles, me he encontrado con historias clínicas IMPOSIBLES de leer [poraki] [poraki] (quizá es la falta de experiencia, o que mi letra se entiende [sonrisa] ), pero entiendo a qué te refieres con lo de que tú ves de forma natural un "orden subyacente" [buenazo] y por supuesto entiendo a la perfección el cabreo por un diagnóstico equivocado y demás XD

PD: no funciona la actualización directa desde uloader, al menos con el alternativo [Alaa!]
Imagen
Wii 4.1E (PimpMyWii) + HBC 1.1.0 + Priiloader 0.7 + cIOS222 rev5.1 + uLoader 5.1E MOD + LaCie Mobile Disk 320GB

Imagen
PS2 FAT v9 + Free McBoot 1.8c + Open PS2 Loader 0.9 + Network Adaptor + HDD IDE 160 GB


Softmodii: La guía para modificar cualquier Wii fácil y rápidamente.

kkolat
Avatar de usuario
Adicto
 
Mensajes: 106
Registrado: 25 Oct 2006

Mensajepor kkolat 25 May 2010 13:54

hola como comente antes la emulacion de wiiware se ha estropeado en esta version.He probado con los cios 5.1 nuevos pero tampoco, sigue dando code dump. Así que a la espera de que Hermes nos diga algo o si la emulacion wiiware es importante para ti pues no actualizes a 5.1.

Hermes
MegaAdicto!!!
 
Mensajes: 11053
Registrado: 18 Ene 2003

Re:

Mensajepor Hermes 25 May 2010 13:54

Bueno, estoy actualizando la aplicación a la versión 5.1A: ya sabéis el dicho, cuando el demonio no tiene nada que hacer, con el rabo mata moscas XD

Dr.wOOx escribió:Ya se que comentas, que no hace falta actualizar a los cIOS 5.1, pero es ver un cIOS nuevo y entrarme las ganas de meterselo a la Wii, pero de momento intentare contenerme.


Hombre, uLoader no lo necesita en absoluto, pero el otro día burton comentaba que parece que otros desarrolladores están a la espera de que yo "haga algo" y ponga un nuevo estandar para evitar ese problema.

Así que les he puesto una vía muy sencilla de solventar el problema que consiste en añadir ésto (pero yo no la he probado):

Código: Seleccionar todo
if (0 == strcmp(message->open.device, DEVICE))
               {
               if(shadow_mload) result=-6;
               else result = message->open.resultfd;       
               }
            else
            if (0 == strcmp(message->open.device, DEVICE"/OFF"))
               {
               shadow_mload=1;
               result=-6;
               }
            
            else
               result = -6;


Eso lo que hace es que si intentas abrir "/dev/mload/OFF", se fija shadow_mload a 1 y a partir de ahí, todas las aperturas retornan en error -6, con lo que virtualmente, es indetectable el dispositivo mload.

Como les he dejado en el readme de los fuentes de mload, propongo una solución bastante sencilla para el tema de otros dispositivos (que consiste en renombrar los dispositivos buscando la cadena apropiada dentro de los módulos antes de cargarlo), sin tener que hacer maniobras complicadas.

/dev/usb2 por ejemplo, podía ser abierto y cerrado en diferentes ocasiones y prefiero no ocultarlo (por el momento lo he renombrado como /dev/usb123 que es lo suficientemente largo como para permitir cambiar de nombre el dispositivo desde fuera por otro de forma aleatoria, llegado el caso).

Pero vamos, /dev/usb123 es un dispositivo que se crea al cargar un módulo externo al igual que dip_plugin a diferencia de lo que pasa con los cIOS de Waninkoko y esto nos da muchas facilidades para poder cambiar esas rutas desde fuera (lo cual conviene sobre todo para aquellos programadores que trabajan con mload, pero no siguen los mismos métodos que yo, fuera de la base mload) y además, no creo que merezca la pena complicarse mucho ocultando dispositivos, cuando se pueden hacer otras acciones mas sencillas para bloquear los USB Loaders...

De todas formas, la solución principal e importante es la de ocultar /dev/mload y para ocultar otros dispositivos, se pueden adoptar muchas soluciones distintas para ocultarlas gracias a las posibilidades que ofrece mload.

Saludos

PrevioSiguiente

Volver a Softmods

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados