Depurador/Desensamblador

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

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Depurador/Desensamblador

Mensaje por Yn$an€ »

Dejo abierto este hilo para tratar sobre el desarrollo del depurador interno de PSP-emu.

Antes de nada, la explicación de turno. Se trata de una pequeña aplicación que estará integrada en el núcleo del emulador y cuyas funciones serán las mismas que las de un depurador convencional, como GDB, si bien en lugar de incidir sobre nuestra máquina física se encargarán de monitorizar los procesos que tengan lugar en la capa del procesador del emulador.

Es una herramienta de desarrollo avanzado, que ayudaría a la identificación y corrección de fallos de una forma mucho más sencilla que un depurador al uso, de ahí su importancia.


Las fases del desarrollo serán 5. A saber:

1-Discusión sobre la integración en el core del emulador y cambios de diseño necesarios.
2-Creación de la GUI para dar soporte a las funciones de depuración.
3-Implementación de la clase de interconexión con el procesador y la memoria.
4-Integración en el core.
5-Mantenimiento y expansión.

Fase actual: 1 & 2 & 4 :lol:


Las dudas, serán respondidas si tienen un mínimo de relación con el tópico que se trata. Cualquiera puede contribuir, tanto con código como con ideas.
Última edición por Yn$an€ el 25 Feb 2011, 10:17, editado 2 veces en total.
... after all, we're all alike.

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

Re: Debugger/Disassembler

Mensaje por m0skit0 »

Pos vamos al tema

Yn$an€ escribió:1-Discusión sobre la integración en el core del emulador y cambios de diseño necesarios.

Yo creo que con ampliar con setters/getters las clases que ya hay tenemos de sobra para integrar el depurador. Tampoco nos compliquemos mucho.

PD: personalmente no me gusta usar palabras en inglés cuando existen en castellano, véase depurador/desensamblador
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Debugger/Disassembler

Mensaje por Yn$an€ »

Has abierto la fase 1! :lol:

Si, pero quizás en otra clase? Lo digo porque también habría que encapsular la tabla de códigos de operación de forma que también contuviese el nombre de la operación en una cadena, y el tipo de operación para que sea posible representarlos en una eventual ventana de código.
... after all, we're all alike.

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

Re: Debugger/Disassembler

Mensaje por m0skit0 »

Hazte un ejemplo y lo vamos viendo sobre eso ;)
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Debugger/Disassembler

Mensaje por Yn$an€ »

Sin problema, pero mañana, que hoy me toca currar en un trabajo de la universidad. :(

A ver, la tabla sería algo así:

Código: Seleccionar todo


struct PlantInstruct
{
   int opcode;
   tError (cAllegrex::*)();
   tOpinfo opinfo;
   int ContadorEjecución;
};

Faltaría declararlo en la cabecera, Así como el struct tOpinfo, pero eso es sencillo

cAllegrex::cAllegrex()
{
   controlador_memoria = NULL;

   int i = 0;
   for (i = 0; i < NUM_OPCODES; i++)
   {
      InstruccionesOpcode[i] = {i ,&cAllegrex::ejecutarInstNoValida, UknownOPinfo}
   }
   
       InstruccionesOpcode[0x15] =  {0x15 ,&cAllegrex::ejecutarInstTipoBNEL, {"BNEL",  OPTYPE_J,}, NULL_Count}



Además, tendría que haber algo que nos permitiese controlar el estado de funcionamiento de emulador. Enccender, pausar, ejecutar siguiente... (creo que es la clase cPSP la que lo permite, pués algo que llamase a sus métodos, pero con algunos cambios)

Lo siento, pero ando corto de tiempo :(

Espero que te sirva de algo, y también no haber cometido muchos errores.
... after all, we're all alike.

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

Re: Depurador/Desensamblador

Mensaje por m0skit0 »

¿Serías tan amable de explicarme un poco tu planteamiento? ;)

Yn$an€ escribió:Además, tendría que haber algo que nos permitiese controlar el estado de funcionamiento de emulador. Enccender, pausar, ejecutar siguiente... (creo que es la clase cPSP la que lo permite, pués algo que llamase a sus métodos, pero con algunos cambios)

Ok a ver si puedo ponerme a ello pronto (o tú también si lo prefieres :lol: ).
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Depurador/Desensamblador

Mensaje por Yn$an€ »

Lo intentaré:

La gui debería de ser la encargada de llamar a los métodos de la clase cPSP encargados de controlar el estado de la emulación.
Para hacer ésto, deberíamos de cambiar esto:

Código: Seleccionar todo

tError cPSP::encender(void)
{
   tError ret = inicializar();

   if (ret == ERR_OK)
   {
      allegrex.ponerControladorMemoria(&controlador_memoria);
      ret = allegrex.encender();

      while(ret == ERR_OK && !Llamada_pausa) //Este while en concreto.
      {


         ret = allegrex.ejecutarCiclo();
      }
   }

   return ret;
}



Y añadir un método que permita pausar y resumir la ejecución.

Código: Seleccionar todo

tError cPSP::pausa(void)
{
     Llamada_pausa= 1;
}

tError cPSP::continuar(void)
{
     Llamada_pausa= 0;
        while(ret == ERR_OK && !Llamada_pausa)
      {


         ret = allegrex.ejecutarCiclo();
      }
            return ret;
}


No me se explicar mejor :? Los puntos que te suenen raros dímelos e intento explicarlo mejor
Y desde luego es la idea. Seguro que se puede implementar de forma mucho más correcta.
... after all, we're all alike.

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

Re: Depurador/Desensamblador

Mensaje por m0skit0 »

Se podría añadir un atributo boolPasoAPaso. Pero eso creo que debería implementarse en el cop0 (que creo que tiene registros para ello).
Imagen

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: Depurador/Desensamblador

Mensaje por Yn$an€ »

Sip, y si ya lo trae de serie, a aprovecharlo. :)

Por cierto, estaría bien mirar el Cop de pcsx2 pa tomar ideas ? :mrgreen: Aún no lo he hecho, perooooo.... :twisted:

EDIT: La insstancia de clase cPSP la he creado dentro de la clase cVentanaPrincipal y he preparado una GUI mínima. Lo malo: no soy capaz de que Code::Blocks localice las librerías de WXwidgets. Ni a mano. Te lo paso si quieres y me dices que tal
... after all, we're all alike.

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

Re: Depurador/Desensamblador

Mensaje por m0skit0 »

Yn$an€ escribió:no soy capaz de que Code::Blocks localice las librerías de WXwidgets

Precisa un poco más el error.
Imagen

Responder