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)
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];
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 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
anda que has ido a fijarte en el mejor, el loader de los code dumps 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
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
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
- 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 )
- Corregida la lectura de DVD para chip puñeteros (dedicado a Spaceman Spiff )
-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? ). 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 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
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
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
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"
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 )
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"
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 ).
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 ) 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 (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 )
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)
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
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.
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
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 )
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 (quizá es la falta de experiencia, o que mi letra se entiende ), pero entiendo a qué te refieres con lo de que tú ves de forma natural un "orden subyacente" y por supuesto entiendo a la perfección el cabreo por un diagnóstico equivocado y demás
PD: no funciona la actualización directa desde uloader, al menos con el alternativo
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.
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
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):
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.