pequeño problema para programar... ayuda...

Alguien sabe porque no me funciona...

PA_OutputText(1,8,15,"-%s-",PA_UserInfo.Name);

(es una funcion de las PAlib para mostrar el nombre del usuario...)


[segun parece la version del flashme tiene algo que ver, por eso, quien pueda que lo prueve y que nos diga algo... ;) gracias]


--------------------------Actualizacion de estadisticas--------------
por ahora:

V5 ---> funciona (1 consolas)
V6---->¿?
V6 sin aviso de salud----> no funciona (4 consolas)
Usas el ds.gba renombrado a .nds en la pupercard o directamente el .nds?

Yo tuve ese mismo problema y era por lo que te digo
Lo tengo probado con la última versión de las bibliotecas:

PA_OutputText(1, 2, 10, "%s", PA_UserInfo.Name);
PA_OutputText(1, 2, 11, "-%s-", PA_UserInfo.Name);
PA_OutputText(1, 2, 12, '%s', PA_UserInfo.Name);

Dan correctamente la salida de las 2 primeras, la tercera imprime basura. Si no es por lo que comenta Locke, pues no sé qué podrá ser...

Saludos.
pues no me funciona, he provado de las dos formas, tambien he provado las variantes que ha comentado gooler, pero nada...

las PAlib, cuando te descargas una nueva, tienes que cambiar algo de tu proyecto o se pilla todos los cambios solito...

Bueno, eso, si alguien acepta un trozo de codigo para ver si le funciona o algo, le estaria agradecido.
De tu proyecto no a no ser que hayan cambiado la interfaz de las funciones. Las bibliotecas debes compilarlas de nuevo, no sé si eso lo hace el instalador de windows porque yo las uso bajo linux, pero por si acaso, en PAlib hay un install y un CPPinstall .bat que hacen eso.

Cuidadín con compilarlas para un lenguaje y usarlo con ficheros de otro porque te funcionarán mal.

Saludos y si no consigues solucionarlo envíame el código por privado.
por si alquien quiere mirar si le funciona... adjunto el codigo y el *.ds.gba.nds ...

(solo esta lo imprescindible...)

Adjuntos

Has recortado tanto que no has puesto ni los include [jaja]. Compilado y funcionando sin problemas, muestra día de cumpleaños y apodo.

Te lo adjunto compilado para descartar que es cosa de las PAlibs (por lo menos de la mía). ¿Puede ser que no tengas los datos puestos en la consola? Pero eso se pone la primera vez que la enciendes... no sé, no se me ocurre nada...

Ya me dirás si te funciona. Saludos.

Adjuntos

hay chikillo xDDDD yo se que modificando lineas se aprende, pero tanto.....

bueno tu paciencia y ve probando pero modificando poco a poco, te aconsejo que te leas el tutorialñ wiki que tiene la web de las palib, que esta muy bien. si no entiendes algo pregunta, que estamos por aki.

por cierto gooler como lo tienes puesto en linux? me gustaria ponerlo tb.
Hola, gracias

No me funcionaba tampoco, (en juegos comerciales si que me pilla el apodo...) entonces he ido a la configuracion y lo he vuelto a meter, y ahora me pilla solo 4 letras de 7...

Creeis que puede ser porque tengo la version del flashme v6 a la que no le sale la pantalla de precaucion esa del principio...?

bueno, eso, que si alguien sabe algo de este problemilla, y me puede ayudar... de todas formas, ahora ya tengo por lo menos un nombre de 4 letras para ir provado...
Neopiro, lo tuyo es raro de cojones [jaja]. A ver si otro compañero puede compilar que yo tengo Flashme v5. Mientras prueba cambiando el nº de letras del apodo a ver si siempre coge 3 menos, qué pasa si sólo pones 1 letra, etc.

grey_fox los pasos son sencillos. Descargar de aquí devkitARM para linux y de aquí libnds. De aquí la última versión de PAlibs Complete comprimida.

Crea esta estructura de directorios y pon cada cosa en su sitio:

/devkitPro
               /devkitARM
               /libnds
               /PAlib

el resto de carpetas las puedes poner aquí o donde te parezca.

Crea las variables de entorno para tu consola, yo las tengo en ~/.bashrc
export DEVKITARM=~/NDS/devkitPro/devkitARM
export DEVKITPRO=~/NDS/devkitPro
export PAPATH=~/NDS/devkitPro/PAlib
export LIBNDS_INCLUDE=~/NDS/devkitPro/libnds/include
export LIBNDS_LIB=~/NDS/devkitPro/libnds/lib
export LIBNDS=~/NDS/devkitPro/libnds

Crea enlaces del contenido de /devkitPro/devkitARM/bin/ a /usr/local/bin

Da permiso de ejecución a install.sh o CPPinstall.sh y compila* las PAlibs con uno de ellos. Aunque deberían, las bibliotecas compiladas para c no sirven para proyectos en c++ y viceversa (aparte de que parece que c++ da más problemas), por lo cual yo tengo 2 directorios PAlib y PAlib++ que únicamente se diferencian en el modo de compilado. Luego elijo cuál se usa para cada proyecto cambiando el Makefile del mismo.

*Unas cositas que se le han pasado al creador de PAlibs, antes de compilar tienes que cambiar la linea 14 del archivo /devkitPro/PAlib/lib/arm7/Makefile y cambiar el NDS en mayúsculas por minúsculas, y también cambiar el directorio /devkitpro/PAlib/include/NDS por nds.

Creo que eso es todo, si tienes algún problema avisa. Saludos.
Me estoy poniendo con C y posteriormente enredaré con las librerías de DS y tal... Una cuestión: ¿qué utilizáis para trabajar en C bajo Windows? Compiladores y eso. ein?
el devkitpro que ya de por si trae un compilador de C para procesadores ARM, y las librerias PA para hacer una facil programacion.
grey_fox_mg escribió:el devkitpro que ya de por si trae un compilador de C para procesadores ARM, y las librerias PA para hacer una facil programacion.


[+risas] Vale... O sea que con lo que te proporcionan puedes ponerte a trastear con la DS... ¡Genial!



[comor?] Offtopic: [comor?] ¿Alguien programa en C (normal, no para procesadores ARM ni movidas, sino el de toda la vida) bajo Windows? Si es así, ¿qué se necesita? Es que he estado mirando por ahí pero no sé... Me parece que da más garantías hacerlo bajo Linux usando sus utilidades de serie...
sinceramente es mas facil proramar bajo linux ya que viene preparado y configurado con los comandos Make y demas, para hacerlo bajo C, pero en windows necesitaras instalarte el Msys o algo asi que es un pequeño entorno para compilar, lo que hace linux de serie.

o usar el devcpp pero yo no uso C para programar normal. pero mas o menos se usa similar. bueno para DS se usa muy poco C solo lo mas simple.

variables, constantes, procesos, include, los IF y cosa simples. no muy complejo, lo demas se usan las PA libs que simplifican mucho la programacion, es tan sencillo como programar en Div, bueno las PA parece un pelin mas simple que el div pero solo hay ligeras variaciones.
Gracias.

Lo que no me hace gracia es tener que iniciar Linux para programar y mientras tanto no poder mantener activo mi programa de descargas... O descargar pero no poder programar mientras... En fin, ¡qué dura es la vida! Jejeje.
Kiza diga una gilipollez evidente, pero le has pasado el ndsloader.bin a tu homebrew para usarlo con la supercard?
quizá te ayude esto.

Reinstala el devkitpro con el ejecutable (la ultima version creo que es la 1.2.5)

Reinicia (para que windows pille las variables)

Reinstala las palib con el ejecutable

Y compila tu programa.
Novedades en la investigacion...

he ido a casa de un colega, que tambien la tiene flasehada V6 sin aviso de salud... y le pasaba lo mismo, no salia su nik, despues le he dichoq ue lo escribiera otra vez, y al ejecutar de nuevo, le han salido 4 letras como a mi las 4 primeras letras... es muy raro... (tambien he visto que si accedo a la alarma, me sale basura, una posicion de memoria no usada en la qu eno hay nada mas que cosas raras....)

si alguien tiene alguan otra version del flashme que ejecute y comente...

por ahora:

V5 ---> funciona (1 consolas)
V6---->¿?
V6 sin aviso de salud----> no funciona (2 consolas)
Ey tio, yo el otro dia probé a compilar un ejemplo de las palibs que precisamente te decia eso, la hora, tu nick y un número con 3 decimales... y en mi nick no salia nada [agggtt]

y a que no sabes que? tengo una V6 sin logo de salud XD
Muy curioso, tengo V6 y tampoco me funciona :-(

Pero no es que el V6 cambiara la dirección de memoria donde se aloja el nombre,

En la siguiente URL listan las direcciones de memoria donde la DS guarda la información:

http://www.bottledlight.com/ds/index.php/Main/Firmware

Basandome en eso he hecho este código y me funciona (Solo que me detecta el tamaño de mi nombre como de 9 caracteres y no de 8 :Ð)

uint16* name=(uint16*)0x027FFC86;
uint8 name_size=(uint8)0x027FFC9A>>4;

iprintf("Nombre: ");
for (;name_size>0;--name_size) iprintf("%c", *name++);

Nota que el puntero al nombre (variable name) es del tipo uint16* y no char*, esto es por que el nombre esta almacenado en UTF-16 y cada caracter ocupa 16bits

Por cierto, ¿Alguien sabe como imprimir directamente UTF-16 o caracteres Japoneses :P?
pues... he actualizado el primer post, ire poniendo lo qeu diga la peña, la version y si les funcioan o no...

respecto a ese codigo, si estoy realizando un trabajo en las PAlib , le puedo meter directamente eso? tengo que hacer algun include??

gracias
Tal cual no

Necesitarás cambiar el iprintf por lo que sea que utilices para imprimir texto en pantalla.

Por otra parte, el código utiliza los tipos declarados por el libnds, el PA_lib debe utilizarlos también.

fuera de eso es un código bastante simple.

De todas formas aqui te lo pongo en forma de función sin el iprintf:

//---------------------------------------------------------------------------------
void getName(char* name_buffer)
//---------------------------------------------------------------------------------
{
uint16* name=(uint16*)0x027FFC86;
uint8 name_size=(uint8)0x027FFC9A>>4;
uint8 i=0;

for (;i name_buffer[i]=0;
}

Necesitas pasarle como parámetro un arreglo de tipo char de almenos 11 elementos (Te copiara el nombre en este). Despues solo tienes que imprimirlo:

char name_buffer[11];

getName(name_buffer);
iprintf("Nombre: %s\n", name_buffer); //O equivalente en PA_lib
muchisimas gracias, me has salvado al vida
22 respuestas