Página 1 de 5

Depurador/Desensamblador

Publicado: 19 Feb 2011, 12:45
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.

Re: Debugger/Disassembler

Publicado: 19 Feb 2011, 16:33
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

Re: Debugger/Disassembler

Publicado: 19 Feb 2011, 16:41
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.

Re: Debugger/Disassembler

Publicado: 19 Feb 2011, 16:54
por m0skit0
Hazte un ejemplo y lo vamos viendo sobre eso ;)

Re: Debugger/Disassembler

Publicado: 19 Feb 2011, 16:59
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.

Re: Depurador/Desensamblador

Publicado: 20 Feb 2011, 20:15
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: ).

Re: Depurador/Desensamblador

Publicado: 20 Feb 2011, 20:43
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.

Re: Depurador/Desensamblador

Publicado: 20 Feb 2011, 22:13
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).

Re: Depurador/Desensamblador

Publicado: 20 Feb 2011, 22:43
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

Re: Depurador/Desensamblador

Publicado: 21 Feb 2011, 09:55
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.