Diseño/normas del software
Publicado: 19 Ene 2011, 10:09
por m0skit0
Sobre los emuladores en general
Estilo del código
H
CPP
Diseño de alto nivel
Mi idea básica es crear clases independientes para cada componente hardware de la PSP (se pueden crear subclases para cada componente, eso ya lo vemos). Después crear una clase "placa base" para entendernos, que interconecte todos estos componentes, haciendo la vez de bus hardware.
Spoiler:
Un "emulador" es, de manera genérica y yendo al tema que nos interesa, un software que corre sobre un tipo de arquitectura hardware X que imita el comportamiento de una arquitectura hardware Y diferente. En nuestro caso más concretamente queremos imitar toda la arquitectura hardware de la PSP en un PC.
Para realizar esto, hay que crear un sistema 100% software que imite un hardware. La imitación debe ser lo más fiel posible, dado que el objetivo final es conseguir que el software que normalmente corre sobre la PSP corra directamente sobre el emulador, esto es, engañarle de manera máxima. Hay que modelizar por software todo el hardware de la PSP, es decir, crear componentes software que imiten de manera fiable y lo más exactamente posible el comportamiento del hardware de la PSP. Resumiendo: hay que crear hardware virtual mediante software.
Uno de los puntos que hay que tener en cuenta es que el hardware realiza operaciones muchísimo más rápido que el software, debido a que éste necesita ya de por sí correr sobre un hardware. Por tanto para emular una máquina por software es necesario que la máquina que emule sea mucho más potente que la máquina a emular. No existen cifras concretas y todo depende realmente de la máquina que se quiere emular y sobre qué máquina.
La mayor dificultad de esto es que la PSP es un sistema cerrado, es decir, no existe prácticamente documentación técnica oficial al respecto.
Para realizar esto, hay que crear un sistema 100% software que imite un hardware. La imitación debe ser lo más fiel posible, dado que el objetivo final es conseguir que el software que normalmente corre sobre la PSP corra directamente sobre el emulador, esto es, engañarle de manera máxima. Hay que modelizar por software todo el hardware de la PSP, es decir, crear componentes software que imiten de manera fiable y lo más exactamente posible el comportamiento del hardware de la PSP. Resumiendo: hay que crear hardware virtual mediante software.
Uno de los puntos que hay que tener en cuenta es que el hardware realiza operaciones muchísimo más rápido que el software, debido a que éste necesita ya de por sí correr sobre un hardware. Por tanto para emular una máquina por software es necesario que la máquina que emule sea mucho más potente que la máquina a emular. No existen cifras concretas y todo depende realmente de la máquina que se quiere emular y sobre qué máquina.
La mayor dificultad de esto es que la PSP es un sistema cerrado, es decir, no existe prácticamente documentación técnica oficial al respecto.
Estilo del código
H
Spoiler:
Código: Seleccionar todo
/*
- Donde digo "int" digo cualquier tipo
- Uso de TABULACIONES (no espacios) para el sangrado
- Una tabulación por cada sangrado
- Las llaves siempre al principio de línea (no al final aaaargh grgrgrgr)
- Todo lo que va dentro de llaves va sangrado (con excepciones sobre todo en C++)
*/
// Esto SIEMPRE, ahorra innumerables errores compilación de referencias circulares
#ifndef ESTA_CABECERA_H
#define ESTA_CABECERA_H
// Primero las cabeceras estándar
#include <stdio.h>
// Luego librerías extra
#include <peasograficos.h>
// Luego las propias de la aplicación
#include "cabezabolo.h"
// Constantes con mayúsculas!!
#define CONSTANTE_DEFINE
#define OTRA_CONSTANTE
// typedef struct siempre directamente
/*
- Cadenas, sLoquesea
- Estructuras, strLoquesea
- Enteros, iLoqusea
etc...
*/
typedef struct
{
// Interesante estructura
}strUnTipo;
// Descripción de la clase y su funcionalidad
class cClase: public cClasePadre
{
private:
// Lo que vaya en cada, tabulado como se debe
protected:
public:
}
#endif
CPP
Spoiler:
Código: Seleccionar todo
// Sólo ésta a ser posible, sólo ésta
#include "cabeceraquecorresponda.h"
// Descripción del cometido del método, de los parámetros de entrada y valor de retorno
int cClase::hace_algo_importante(int parametro1)
{
// Siempre incializar
int iDescribeme = 0;
// Nunca valores literales en el código, siempre usar constantes, salvo valores intrínsecos del lenguaje
// Siempre con llaves, aunque la sintaxis permita que no se usen
if (iDescribeme == CONSTANTE_DEFINE)
{
// Usa y abusa de los paréntesis (se ve(que programo(en lisp?)))
while ((iDescribeme > 0) && (iDescribeme < CONSTANTE_DEFINE))
{
// Muchas cosas difíciles y complicadas
}
}
else
{
// Buah, más difícil aún
}
// Todo sangrado en el switch
switch(iDescribeme)
{
case CONSTANTE_DEFINE:
break;
}
// Un solo return por función!
return OTRA_CONSTANTE;
}
Diseño de alto nivel
Mi idea básica es crear clases independientes para cada componente hardware de la PSP (se pueden crear subclases para cada componente, eso ya lo vemos). Después crear una clase "placa base" para entendernos, que interconecte todos estos componentes, haciendo la vez de bus hardware.