20 de octubre de 2012

Retomando ElectricRPG...

Tras el paro comentado en los anteriores post, es el momento de continuar con el desarrollo del juego ElectricRPG. Toca recordar lo que funciona y lo queda por retocar... así que de momento voy probando cosas...

 

- Importar mapas (inbox iOS) funciona perfectamente.

- Gestión de mapas (importar/exportar) desde iTunes OK.

- La velocidad de la app es más que correcta (40 fps).

- Efecto de explosión enemigos correcto.

- RAM ok. Parece que la optimización de la rutina de Render ha dado sus frutos.

- Nuevo editor de mapas Ok.

 

Y continuo trabajando... ;D

Aprendiendo a programar un Emulador (DCPU-16) - GAME OVER

Se acabó el juego!

Para este "proyecto rápido" me había marcado un tiempo máximo de desarrollo de unos 15 días más o menos...

En los pocos ratos que he podido escribir (y entender primero) el código necesario para emular el funcionamiento de una CPU, he conseguido programar con éxito varias cosas:

- Main loop bastante decente controlando el tiempo de los ciclos de las instrucciones.

- Interpretación correcta de los word, así como las instrucciones y los operandos A y B.

- Control de lectura/escritura en Registros, Pila y RAM.

- Implementación de sistema de vídeo gráfico con Set de carácteres Ascii según especificaciones.

 

Desgraciadamente, he alcanzado el límite de tiempo, así que de momento aparco este asunto, pero con la intención de retomarlo en un futuro... y terminarlo.

Aunque no he podido llegar a terminar el programa al 100%, me siento bastante satisfecho con todo lo aprendido en este tipo de programación... creo que ahora estoy más cerca de entender completamente el funcionamiento de un procesador en su nivel más bajo...

En un futuro... MÁS!

17 de octubre de 2012

Aprendiendo a programar un Emulador (DCPU-16) -4

Nueva captura de mi emulador en la que se aprecian los pequeños avances en cuanto a control del programa en sí.

He añadido una rutina de control de teclado para poder modificar la posición PC y los valores de la RAM.

16 de octubre de 2012

4 de octubre de 2012

Aprendiendo a programar un Emulador (DCPU-16) -2

Bueno, como se puede ver en la captura, ya tengo montado una CPU en su estado más básico.

El mainloop funciona correctamente, aunque para DEBUGGEAR bien controlo el bucle con una pausa en espera de tecla... así voy viendo COMO está leyendo la RAM y si los registros y tal se actualizan como corresponden...

He implementado los registros, y tengo también una rutina que muestra el estado de RAM y VIDEO-RAM.

He introducido también en la RAM el código de un "Hello World", para ir comprobando que interpreto bien las instrucciones (esto ya lo tengo)... y hacer los cálculos/operaciones/lo que sea de dichas instrucciones (en lo que estoy).

Para el tema de sincronizar el vídeo me quiero basar en la info que se muestra aquí. (Es más/menos lo que comentaba @jepalza en un post) ;)

Pego el texto que me interesa del link aqui:

Con el fin de emular estas tareas deberás ejecutarlas tras el número apropiado de ciclos de CPU. Por ejemplo, si la CPU se supone que corre a 2.5Mhz y el display usa una frecuencia de refresco de 50Hz (estándar para el vídeo PAL), entonces la interrupción VBlank ocurrirá cada:

2500000/50 = 50000 ciclos de CPU

Si asumimos que la pantalla entera (incluyendo VBlank) es de 256 scanlines de alto y 212 de ellas son mostradas en el display (las otras 44 caen en el VBlank), entonces obtenemos que nuestra emulación debe refrescar un scanline cada:

50000/256 ~= 195 ciclos de CPU

Tras eso, debemos generar una interrupción VBlank y no hacer nada hasta que se haya acabado con el VBlank, es decir, durante:

(256-212)*50000/256 = 44*50000/256 ~= 8594 ciclos de CPU

Calcula cuidadosamente el número de ciclos de reloj necesarios para cada tarea, y entonces utiliza el divisor común mayor para InterruptPeriod, ajustando todas las otras tareas a él (no tienen porqué ejecutarse en cada expiración del contador Counter).

Las especificaciones de DCPU-16 difieren de las que se muestran en este ejemplo, así me tocará adaptarlas. ;)

OPS! Acabo de descubrir un pedazo de bug.... estoy cruzando el byte alto / byte bajo cuando leyo una posicion de RAM. Vaya cag*da!!! :P

*Solucionado!!! :D

Aprendiendo a programar un Emulador (DCPU-16) -1

¿Cómo se escribe un programa que emula un ordenador?

Picado por esta curiosidad, y animado por los post del foro Zonadepruebas cuyo tema es Proyecto ZDP-80 - Nuestro microordenador desde cero [#01], he decidido intentar escribir un emulador de la computadora DCPU-16.

Enlace en el foro donde consulto COMO implementar este tipo de programación. (Aprendiendo a programar un Emulador (DCPU-16)).

Muy interesante, recomiendo visitar los hilos sobretodo si eres una persona amante de la electrónica y los ordenadores. ;D

2 de octubre de 2012

Cambio de mes... y pausa breve.

Entrando en Octubre... voy a hacer una pequeña pausa en el proyecto para sumergirme en una "aventura nueva" relacionada con la programación y los emuladores...

Si no hay problemas, en breve más información.