Depurador/Desensamblador
Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06
Depurador/Desensamblador
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
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.
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
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.
Re: Debugger/Disassembler
Pos vamos al tema
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
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
Has abierto la fase 1!
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.
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.
Re: Debugger/Disassembler
Sin problema, pero mañana, que hoy me toca currar en un trabajo de la universidad.
A ver, la tabla sería algo así:
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.
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.
Re: Depurador/Desensamblador
¿Serías tan amable de explicarme un poco tu planteamiento?
Ok a ver si puedo ponerme a ello pronto (o tú también si lo prefieres ).
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 ).
Re: Depurador/Desensamblador
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:
Y añadir un método que permita pausar y resumir la ejecución.
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.
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.
Re: Depurador/Desensamblador
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
Sip, y si ya lo trae de serie, a aprovecharlo.
Por cierto, estaría bien mirar el Cop de pcsx2 pa tomar ideas ? Aún no lo he hecho, perooooo....
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
Por cierto, estaría bien mirar el Cop de pcsx2 pa tomar ideas ? Aún no lo he hecho, perooooo....
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.
Re: Depurador/Desensamblador
Yn$an€ escribió:no soy capaz de que Code::Blocks localice las librerías de WXwidgets
Precisa un poco más el error.