PSP & desarrollo ASM, comienzo imposible!?

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
Darthvader38
Enteradillo
Enteradillo
Mensajes: 67
Registrado: 24 Ene 2010, 06:39

PSP & desarrollo ASM, comienzo imposible!?

Mensaje por Darthvader38 »

Hola a todos chavales!

Con la dimension de este mensaje se va a reafirmar mi reputacion de escribir mucho (mal asunto ese :( ), pero no me queda otra...googlear ya no es opcion si teneis en cuenta que he estado muchas horas buscando sin resultados y que existe este foro con un m0skit0 rondando por aqui.

m0skit0, estoy siguiendo un Curso de ensamblador hecho por ti (creo q lo hiciste hace un par de años) y estaba posteado en la ya
fallecida web (segun tengo entendido)
$k0AdvancedPSP.tK $k1 ,el caso es que me lo baje en ese entonces, y ahora despues
de cientos de horas escribiendo C, veo que es el momento de tomarme la pastilla roja (tal vez sea muy tarde para seguir en la scene de
PSP, pero eso no me quita en lo minimo el impulso de aprender ASM para esta portatil),el asunto es que veo realmente mucho "humo" respecto a
PSP y ASM, no he encontrado ni una sola plantilla funcional a modo de Hello World!
He leido que en el PSPSDK algo llamado gcc compila codigo ASM para PSP y que ademas
lo que compila de por si solo no es funcional, creo que necesita algo mas...(ni idea,
esto no lo tengo claro).
He localizado el gcc dentro del SDK, pero me da la idea que hay que usarlo mediante comandos del DOS o algo por el estilo para pasarle parametros, pero solo es una congetura mia hasta que me lo confirmen.
No he terminado el curso porque el SPIM que encontre es el nuevo que se llama QTSPIM y
el primer ejemplo que hay me da errores abriendolo -->

spim: (parser) syntax error on line 6 of file "blablabla/suma.asm"
li $8,0x2

Llevo ya muchas horas buscando y no he encontrado ayuda referente a inicirame con una plantilla,
considero mal habito copiar y pegar codigo que no entiendo, pero ese metodo me puede servir de exploracion.

Mis preguntas son:
1- Existe alguien con alguna plantilla tipo HelloWorld de ASM para PSP? (sin mucho mas, yo me dedicaria
a entenderla y revisarla :pinta: )

2- Como compilo codigo ASM a prx? (ESTO ES MEGAIMPORTANTE PARA MI!!!)

3-Lei que podia hacer un HelloWorld en C y despues desensamblarlo (llevarlo a instrucciones ASM), que necesito para hacer
esto? y como podria volver a ensamblarlo?

4-Que es gcc? Me es util? Como puedo usarlo?

Nada mas encuentre otro SPIM sigo el curso de ASM, lo que empiezo lo termino!, me daria
mas fuerza tener algo tipo HelloWorld de ASM y tener el acceso a compilarlo como prx para
el psp, "para jugar con el", ESTO ME ES MEGAIMPORTANTE.

Solo queda despedirme y cruzar los dedos esperando
que nadie interprete que quiero que me resuelvan la vida, lo que necesito
es un impulso inicial, no importa que sea del tamaño de un m0skit0.
Salu2! :oki:
Si de algo sirve, mi sistema es (Windows XP).

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por m0skit0 »

Bueno como hablamos por privado, allá va 8-)

Primero sólo por el hecho de usar Windows podría abstenerme de responderte :laughing: En serio, déjate de SO de pacotilla, si lo que te va es programar, Linux te va a gustar muchísimo más una vez lo controles un poco. Además el PSPSDK se hizo en Linux para Linux y usa herramientas Linux (que luego se portaron a Windows). Si usaras Linux la mitad de estas preguntas ya te las habrías respondido tú mismo.

Segundo yo llevo mucho tiempo fuera de esto y casi todo lo que tenía de desarrollo de PSP o lo he borrado o no sé dónde está ni me importa :D, así que no esperes samples de código porque no los tengo.

Tercero veo que tienes confusiones a la hora de usar Windows. En XP no hay DOS. Eso es la consola de Windows, también conocida como Powershell -aunque de power lo justo, aún no se puede agrandar horizontalmente y estamos en el 2013 ya ajajajaja- mucho más potente que el viejo DOS. No confundamos términos ;) Es algo parecido a la consola de Linux, aunque en Linux las consolas son muchísimo más potentes, aparte de poder elegir el programa que ejecuta la consola (en Windows esto no es posible ya que la consola es un solo ejecutable cmd.exe).

Darthvader38 escribió:1- Tienes a mano alguna plantilla tipo HelloWorld de ASM para PSP (sin mucho esfuerzo de tu parte, yo me dedicaria a entenderla y revisarla)?

Nadie hace un holamundo en PSP en ensamblador (no ASM ;) ) porque es algo inútil y laborioso. Es mucho más rápido y fácil en C ya que el PSPSDK ya ofrece funciones para ello. No hace falta que entre en detalles, el caso es que es algo que realmente poco te va a aportar (no creo que ponerse a dibujar píxeles en la pantalla para formar letras sea algo divertido).

Darthvader38 escribió:2- Como compilo codigo ASM a prx? (ESTO ES MEGAIMPORTANTE PARA MI!!!)

Ensamblando los ficheros a ficheros objeto (.o) y luego enlazándolos con un linker. Todo esto te ha sonado a chino, ¿verdad? Más abajo te lo explico en detalle porque creo saber la razón de tus desconocimientos ;)

Darthvader38 escribió:3-Lei que podia hacer un HelloWorld en C y despues desensamblarlo (llevarlo a instrucciones ASM), que necesito para hacer esto? y como podria volver a ensamblarlo?

No necesitas desensamblarlo, quién haya dicho esto no tiene ni idea (o bueno, tiene una idea equivocada). Esto también te lo explico más abajo.

Darthvader38 escribió:4-Que es gcc? Me es util? Como puedo usarlo?

GCC es GNU C Compiler, es un, bueno mejor dicho EL compilador de C. Si has hecho un homebrew en C, entonces ya lo has usado (en el PSPSDK se llama psp-gcc).

A ver respecto a tus confusiones:

  1. Olvídate del SPIM, está desfasado. Si buscas un buen simulador MIPS, MARS es lo que quieres. Eso sí, olvídate que el código que hagas aquí funcione directamente en PSP si usas llamadas al sistema (operaciones syscall). Una syscall llama al sistema operativo, y el incluído en MARS no tiene nada que ver con el de PSP (ni siquiera las llamadas se hacen igual...). Además la PSP utiliza estructuras ejecutables PRX que dificultan aún más el asunto porque las llamadas al sistema no están cargadas en el PRX, sólo sus referencias (NIDs). Esto es muy lioso y no te voy a comer la cabeza con ello. Tú primero concéntrate en aprender ensamblador MIPS con MARS, lo otro ya habrá tiempo para explicarlo.
  2. Veo que no entiendes cómo funciona C, es decir, cómo se compila y estas cosas. Aquí explico cuál es el proceso de compilación de C y todos sus pasos. Esto espero que te aclare tus preguntas sobre GCC, C y ensamblador. Cualquier duda que tengas, pregunta.
Imagen

codestation
Desarrollador
Desarrollador
Mensajes: 33
Registrado: 27 Nov 2012, 03:49

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por codestation »

m0skit0 escribió:
Darthvader38 escribió:3-Lei que podia hacer un HelloWorld en C y despues desensamblarlo (llevarlo a instrucciones ASM), que necesito para hacer esto? y como podria volver a ensamblarlo?

No necesitas desensamblarlo, quién haya dicho esto no tiene ni idea (o bueno, tiene una idea equivocada). Esto también te lo explico más abajo.


Tan mala idea no es. Desensamblar un hello world no tiene mucho sentido pero si ayuda a comprender cual es el equivalente de algunas estructuras en asm. Por ejemplo, cuando comencé a experimentar a inyectar trozos de código asm con plugins a veces desensamblaba llamadas, bucles y condicionales para saber la forma correcta de escribir mi propio asm. Claro, me las vi mal ya que venia con conocimientos anteriores de asm bajo x86 y muchas cosas que asumía eran incorrectas o no tenían sentido bajo mips: al principio no entendía como se cargaban valores en los registros y luego que se hacían en dos partes (alta y baja) al desensamblar algo de código C compilado. También perdí mucho tiempo aprendiendo asm cuando muchos de los tutoriales no explican el dichoso delay slot (el cual no existe bajo x86 y hacia incomprensible todo el código mips que leía tras desensamblar los prx de la psp :tiro: ).

Joder, lo del MARS me hubiese ayudado cuando comencé a programar plugins, lastima que nunca di con él...

P.D.: te sugiero que comiences en comprender como programar plugins para psp en C y luego a inyectar pequeños trozos de asm en memoria. Las pocas restricciones que tiene la PSP una vez que estas en modo kernel hacen muy divertido probar trozos de código de una forma que seria muy difícil en otras plataformas. Por ejemplo una vez redireccioné el punto de inicio de un homebrew para que ejecutara codigo asm que habia puesto en la pila antes de saltar al punto de entrada original (necesitaba que los juegos ejecutaran un syscall antes de iniciar y no quedaba memoria suficiente en modo usuario para hacer un alloc).
Última edición por codestation el 01 Oct 2013, 17:05, editado 1 vez en total.
printf("Tell your world\n");

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por m0skit0 »

codestation escribió:Tan mala idea no es. Desensamblar un hello world no tiene mucho sentido pero si ayuda a comprender cual es el equivalente de algunas estructuras en asm.

Jejeje no me has entendido. Mala idea no es, claro que no, pero compilar un hello world para desensamblarlo sí que no tiene sentido porque simplemente le puedes decir al compilador que te genere directamente el ensamblador. Léete el enlace.
Imagen

codestation
Desarrollador
Desarrollador
Mensajes: 33
Registrado: 27 Nov 2012, 03:49

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por codestation »

Ah, lo del gcc -S, no me acordaba de esa opción... y encima lo he posteado yo en ese hilo.... facepalm :juasjuas:
printf("Tell your world\n");

Avatar de Usuario
Darthvader38
Enteradillo
Enteradillo
Mensajes: 67
Registrado: 24 Ene 2010, 06:39

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por Darthvader38 »

Bien! esto es mucha info valiosa a la vez! :shock:

M0skit0:
Estoy muy emocionado por empezar ASM para MIPS!!!
entiendo,ahora MARS sera mi destino. :geek:
Sobre compiladores nunca me preocupe por comprender lo que hacian,
llegando a este punto con ASM me leo inmediatamente el link que me dejaste!

Codestation: Sí, he desarrollado varios plugins, lo que todo en C, como puedes imaginar.
De momento ->Exactamente eso que haces es lo que quiero aprender! :shock: Diste en el centro de la diana!
Me es interesante en gran medida practicar inyeciones de codigo en otros
modulos! (plugins en este caso), por eso quiero aprender ASM, ademas es constructivo.
Ah!No tengo idea de que son los delay slot, obviamente porque no me he introducido
en el asunto de ASM, espero no tropezar tanto como dices con eso, la alerta ya me la diste, la explicacion, no,
espero que no te la quedes para ti, ;) .

En resumen, me parece que abrir este tema ya era NECESARIO en el foro, de hecho me sorprende que no
halla nada sobre ASM-MIPS aqui (o me equivoco? :?: ) , no para un novato.
Espero que sigan colaborando en el asunto (ya tenemos bastante sobre LUA y mucho C),
de ser asi, yo me ocupare de traer dudas nuevas :lol:
Salu2, DaxHordes!

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por m0skit0 »

*haya :D

La verdad es que me parece que no hay nada de MIPS... Realmente no es algo que mucha gente decide aprender, eres un caso especial :mrgreen: Normalmente la gente va a por LUA ( :muerte: ) o por C, ya que básicamente con C puedes hacer casi todo lo que puedes hacer en MIPS. Por algo le llaman a C ensamblador de alto nivel :lol:

Por cierto, para mí el mejor tutorial de MIPS que he visto es éste, con el que aprendí yo 8-)
Imagen

codestation
Desarrollador
Desarrollador
Mensajes: 33
Registrado: 27 Nov 2012, 03:49

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por codestation »

Darthvader38 escribió:Ah!No tengo idea de que son los delay slot, obviamente porque no me he introducido
en el asunto de ASM, espero no tropezar tanto como dices con eso, la alerta ya me la diste, la explicacion, no,
espero que no te la quedes para ti, ;)


Si no me equivoco los delay slot son instrucciones que vienen luego de las instrucciones de salto pero que se ejecutan antes. Creo que se ve mejor con un ejemplo sacado del desensamblado de unos de los módulos de la PSP (sceCtrl del 6.60 para ser mas exactos):

Código: Seleccionar todo

; Data ref 0x00001DD8 ... 0x27BDFFF0 0xAFB00000 0xAFB10004 0xAFBF0008
        0x00000484: 0x3C020000 '...<' - lui        $v0, 0x0

loc_00000488:           ; Refs: 0x00000470
; Data ref 0x00001DD8 ... 0x27BDFFF0 0xAFB00000 0xAFB10004 0xAFBF0008
        0x00000488: 0x24451DD8 '..E$' - addiu      $a1, $v0, 0x1DD8
        0x0000048C: 0x240402BC '...$' - li         $a0, 0x2BC
        0x00000490: 0x0C000897 '....' - jal        sceKernelSetAlarm
        0x00000494: 0x00003021 '!0..' - move       $a2, $zr

loc_00000498:           ; Refs: 0x00000464 0x00000518
; Data ref 0x00002890 ... 0x00000000 0x00000000 0x00000000 0x00000000
        0x00000498: 0x26032890 '.(.&' - addiu      $v1, $s0, 10384


Como yo venia con un pasado de x86 simplemente lo leía así:
Se ejecutan las instrucciones en 0x484 - 0x488 - 0x48C. Luego ese ejecuta la llamada en 0x490 y cuando esta termine regresará a 0x494 y continuará.


Lo cual es totalmente erróneo ya que se ejecuta de esta manera:
Se ejecutan las instrucciones en 0x484 - 0x488 - 0x48C. Se ejecuta el delay slot que está luego del salto en 0x494, y luego se ejecuta la llamada en 0x490. Cuando la función regrese lo hará en 0x498 y se continua ejecutando el programa.


Lo cual tiene mas sentido ya que este caso se le pasan 3 parámetros a la función sceKernelSetAlarm en a0, a1 y a2 (según la documentación del pspsdk). Traduciéndolo a C (que no tiene nada que ver con delay slots, pero lo cuelo aquí) quedaría algo como:

Código: Seleccionar todo

sceKernelSetAlarm(700, 0x00001DD8, NULL);
// en este caso la última instrucción no es suficiente para saber que pasa luego de la llamada y ver que se hace con el valor de retorno, se tendría que ver un poco mas del desensamblado.


Tienes que estar con los ojos abiertos ya que los delay slots ocurren en los saltos a direcciones fijas (jal), dn saltos a direcciones en un registro (jr), condicionales de salto como por ejemplo un bnezl (salta si el registro es distinto de zero) y syscalls (no se si se me escapa algún otro).

Generalmente los iniciados que escriben asm mips a mano ponen "nop" en los delay slot para que el código pueda leerse mas fácilmente pero luego uno se acostumbra y comienza a poner instrucciones reales allí.
printf("Tell your world\n");

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por m0skit0 »

No me líes al chaval y no empieces la casa por el tejado :lol: Todo esto le va a sonar a chino si no sabe ensamblador aún hombre ;)

codestation escribió:se le pasan 3 parámetros a la función sceKernelSetAlarm en a0, a1 y a2 (según la documentación del pspsdk).

Según la documentación del PSPSDK no. Los parámetros se pasan en $aX según MIPS ;)
Imagen

codestation
Desarrollador
Desarrollador
Mensajes: 33
Registrado: 27 Nov 2012, 03:49

Re: PSP & desarrollo ASM, comienzo imposible!?

Mensaje por codestation »

m0skit0 escribió:No me líes al chaval y no empieces la casa por el tejado :lol: Todo esto le va a sonar a chino si no sabe ensamblador aún hombre ;)

Por lo menos ya lo tiene allí cuando comience a leer asm. Tuve un trauma con eso del delay slot y no se lo deseo al chaval (aunque fue culpa mía por no investigar y asumir que se leía igual que x86).

m0skit0 escribió:
codestation escribió:se le pasan 3 parámetros a la función sceKernelSetAlarm en a0, a1 y a2 (según la documentación del pspsdk).

Según la documentación del PSPSDK no. Los parámetros se pasan en $aX según MIPS ;)

Me refería a que la función acepta 3 parámetros (y que lo podía confirmar en el pspsdk), no me dejas ganar una :juasjuas:
printf("Tell your world\n");

Responder