[Devlog] Vircon32: Creando mi propia consola

carra

#570 Gracias! Pues ni idea, sé que los cartuchos comerciales están hechos con moldes de inyección pero ya para conseguir eso con métodos más "caseros" habría que probar, no sé cómo saldría cada uno jeje

carra

Acabo de subir a GitHub la parte 9 de la especificación (formatos de archivo). Los formatos de archivo que usa Vircon son sencillos, pero como siempre definirlos de una forma clara y completa ha llevado bastante trabajo.

Alguno os preguntaréis por qué he saltado desde la parte 4 que era la última hasta ahora, directamente a la 9. Lo he hecho para facilitarle el trabajo a una persona de Discord, que ha empezado a crearse su propio emulador de Vircon32 en lenguaje Rust (tenéis su repo aquí). Y aunque hay otras partes de la especificación que no están hechas aún, sí que se menciona lo básico en las guías de la consola. En cambio para los formatos de archivo lo único que se podía hacer ahora mismo era averiguarlos mirando el código del emulador.

4
carra

Ya tengo un diseño para la primera caja física de mis juegos, en este caso la de Basic Platformer. Así es como queda en desarrollo:

Como véis el diseño es una copia descarada de las cajas de juegos PAL de Super Nintendo :rofl:. Y cuando diseñe otras cajas seguiré la misma plantilla para que todo se vea como parte de una colección. Cuando me la impriman y la tenga hecha os pondré fotos.

Por otro lado estoy trabajando ahora en crear la versión simplificada del emulador que comenté (creo) hace un par de páginas. Esto le facilitará la vida al chaval que está haciendo su emulador de Vircon.

8
carra

Ya he subido al repo el emulador simplificado de Vircon32. En esta versión he sido capaz de quitar todo lo siguiente:

  • Todas las configuraciones
  • Toda la interfaz gráfica
  • El soporte multilenguaje
  • Las clases y macros para logs
  • Los vertex y fragment shaders
  • Las matrices de transformación de vista
  • El uso del framebuffer de OpenGL
  • Los niveles de zoom de la ventana

Gracias a eso he eliminado las dependencias de estas librerías:

  • SDL2_image
  • Imgui
  • libpng
  • osdialog
  • tinyxml2
  • quizás GTK en linux? tengo que mirarlo

Por si no quedaba claro, no uséis esta versión para jugar! A ver, podríais, pero va a ser bastante incordio de usar jeje. Esta versión está pensada para quien quiera analizar el código y mirar cómo está implementada la consola. Al dejar un código bastante más sencillo, es más fácil de entender.

10
carra

Al fin he subido la especificación de sonido a GitHub. Me ha llevado bastante más trabajo del que había previsto, pero al menos esta ya era la última parte "de las difíciles" dentro de la especificación. Las 3 que quedan deberían ser más sencillas que las que están hechas hasta ahora.

Hay un par de cosas en el audio de mi emulador actual que todavía no siguen completamente la especificación de sonido. La más importante es que la generación de sonido debería hacerse sólo entre frames. Esto no es algo crítico (no váis a oir diferencia en el sonido), pero lo digo por si alguien mira el código y le parece raro.

También he subido las versiones editables de las especificaciones (en Word) así como sus imágenes, para facilitar a quien quiera contribuir con traducciones de las especificaciones a otros idiomas. De momento Stan ya ha traducido la primera parte al holandés jeje.

6
carra

Hoy estaba con la vena artística y se me ha ocurrido probar a ver qué tal quedaría un diseño físico de Vircon32, pero no en formato consola sino como arcade. ¿Qué os parece?

Aclaro que no tengo planes de construir esto a día de hoy. Bastante tengo con conseguir la versión consola algún día jeje. Pero es una buena forma de ver cómo se podrían encajar todos los elementos de la consola, incluidos los 4 mandos.

6
7 días después
carra

Me temo que mi primer prototipo de caja para juego ha sido más bien fallido.
Esta es la pinta que tiene:

Ha habido un par de problemas bastante evidentes. Por un lado en el sitio donde me lo han impreso, aunque la calidad es espectacular, no controlan muy bien los tamaños y la caja ha salido como medio centímetro más grande de lo que debería ser. Luego está el problema de las formas. Ha quedado bastante abombada y hay caras que no están nada rectas.

Esto ha venido por mi proceso para fabricarla. La lámina impresa de por si no es lo bastante gruesa y rígida para hacer una caja de cartón. Además, haciendo la caja de esa forma por dentro queda blanca (es como el dorso de una cartulina) y visualmente no queda muy bien, las cajas clásicas por dentro tienen el típico cartón gris. Así que lo que he hecho es reforzar el interior con cartulina gris con una textura similar a esos cartones.

Lo que ha pasado es que o bien no he aplicado el pegamento correctamente o directamente no era el tipo de pegamento más adecuado. Además del abombado veréis que tiene tendencia a despegarse en algunas solapas de la caja. Seguiré haciendo más pruebas para ver cómo lo puedo arreglar.

Por lo demás si que estoy contento con cómo ha quedado el diseño de la caja. La verdad es que reforzar con cartulina le da el grosor y la resistencia perfectos, se parece mucho al tacto de una caja de super nintendo. A ver si en el segundo prototipo sale mejor :relaxed:

6
carra

Estos días iba a trabajar en escribir especificaciones, pero al final me ha apetecido más trabajar en las ediciones físicas de los juegos :sweat_smile:. Así que aquí tenéis una vista previa de cómo va a ser el manual de instrucciones para Basic Platformer:

8 1 respuesta
Ridote

#578 hostia vaya rollito super nintendo más molón. Me recuerda entero al manual del super mario world

2 1 respuesta
carra

#579 Pues cuando lo veas terminado te lo va a recordar aún más! Los manuales de Super Nintendo han sido mi inspiración para el diseño y se nota mucho jeje

1 respuesta
Ridote

#580 en esas épocas nintendo hacía las cosas muuuuuy pero que muy bien. Se notaba el mimo y el trabajo.

PD: como ahora con el pokemon buggeado que parece que lo ha hecho @totespare en cuatro tardes libre xD

Lolth

Para cuando el doom en Vircon?

1 respuesta
carra

#582 Pues @r2d2rigo ya se acercó con el Virconstein 3D jeje

carra

Por fin he podido terminar la edición física de mis juegos :smiley: Por ahora estos dos. Me ha costado mucho trabajo pero el resultado me convence bastante.

De momento os pongo esta foto para abrir boca, mañana quiero subir un video donde ya lo enseñe todo con más calma.

11
carra

Bueno, pues como os prometí aquí tenéis un video con el unboxing completo :smiley:

19
7 días después
carra

He subido a GitHub la parte 6 de la especificación: los chips controladores. Este documento agrupa los 3 chips que controlan los elementos extraíbles de la consola: los mandos, el cartucho y la memory card.

Ya solo quedan las partes 7 y 8, que deberían ser con diferencia las más sencillas de escribir. Esto quiere decir que nos acercamos a un hito importante en el proyecto, que es tener completamente especificado el comportamiento de la consola.

6
carra

Cuando termine de escribir los documentos que me faltan me quiero poner de nuevo un tiempo a hacer juegos. Mientras escribo, he estado proyectando también mi siguiente juego, que va ser uno tipo Snow Bros. He dibujado ya los personajes del juego, que son todos animales:

Se los he pasado a un artista en Fiverr, que me los va a dibujar en pixel art con sus animaciones. Luego ya yo me buscaré la vida para dibujar las tiles y los fondos, porque tampoco me quiero gastar demasiada pasta jeje. A menos que me tocara hoy el gordo jajaja.

11
carra

He subido a GitHub la parte 7 de la especificación: otros componentes de la consola. Este documento agrupa los componentes internos de la consola que faltaban por especificar. Ya solo queda la parte 8, que será un documento corto para describir los componentes externos a la consola.

También comento que en Discord un usuario me ofreció en privado donarme una Raspberry Pi 4 que le sobraba, para el prototipo físico de la consola. La putada es que vive en Estados Unidos, y el envío sale bastante caro (además hay que contar con las aduanas), con lo que no merecía la pena y se lo he tenido que rechazar.

5
carra

Ya he subido a GitHub el último documento que faltaba: la parte 8 (elementos externos).

Para que tengáis una referencia, la especificación completa (los 9 documentos, quitando portadas y "paja") son 170 páginas. Os podéis estar preguntando por qué es tan largo, si se supone que Vircon32 está pensada para ser muy simple. Hay varias razones:

  • Todos los componentes (CPU, etc) son personalizados y hay que explicarlos al completo.
  • Intento cubrir todas las situaciones posibles, para no dejar nada al azar.
  • Explico posibles maneras de implementar ciertas cosas en la práctica.
  • Incluyo muchas imágenes, diagramas y tablas para aclarar las explicaciones.

Con esto, he conseguido el objetivo que buscaba que era tener la especificación completa de la consola antes de final de año (por poco, pero sí :sweat_smile:). Esto es un punto importante para el proyecto, ya que a partir de ahora yo "dejo de ser necesario" y cualquiera debería poder hacer su propia implementación de Vircon32 (ya sea con software o hardware). Para ello contarían con:

  • La especificación completa de todos los aspectos de Vircon32.
  • Una implementación completa de referencia (mi emulador).
  • Una implementación simplificada pensada para seguir mejor el código.
  • El conjunto de programas de test, que prueban diferentes aspectos de la consola.
  • Varios juegos completos, para poder hacer pruebas más completas.
  • Herramientas de desarrollo para poder hacer tests personalizados.

Creo que con esto debería ser más que suficiente para quien se pueda interesar :blush:.

14
carra

Este año he decidido regalarme para reyes una Raspberry Pi 4 :smile:. Están aún caras pero he encontrado una oferta que no estaba mal y me he lanzado.

Pensaba pedir una prestada, pero he estado trasteando con la 3 que tengo y me he dado cuenta de que no me va a valer tenerla sólo unos días. Me puede llevar tiempo que compile todo sin problemas y que OpenGL se ejecute con aceleración. Además me gustaría ir haciendo pruebas, sobre todo por tomar una decisión cuanto antes de si aumentar la velocidad de la CPU de Vircon de 9 a 12 MHz. Es el último posible cambio que tenía pendiente de decidir, y ahora que las especificaciones ya están escritas me gustaría cerrar este tema para que puedan quedar ya en su versión final (salvo erratas o pequeñas correcciones que puedan hacer falta).

1 1 respuesta
Jastro

#591 se viene vircon32 en fisico

1 respuesta
carra

#592 Pues supongo que este año podré tener como mínimo un primer prototipo funcionando. Aunque por ahora mi prioridad van a ser más los juegos.

2
kidandcat

Si te la marcas en físico, no la emules en una RPI, marcatela a tope, entre la impresion 3D y los servicios de impresion de placas super baratos, no debería ser muy complicado, solo hay que elegir un chip que se ajuste bien a las especificaciones

Algo asi :) https://www.gamedeveloper.com/design/building-a-homebrew-video-game-console

Pero no hace falta ser tan hardcores, te la diseñas, y te la encargas:
https://www.eurocircuits.com/pcb-prototypes-33-manufactured-and-assembled/
https://jlcpcb.com

Son ejemplos, busca tu que yo no tengo ni papa idea xD

1 1 respuesta
carra

#594 Pues no estoy seguro de que se pudiera hacer eso. En mi consola todos los chips son diseñados desde cero, con lo que no va a existir ningún procesador comercial que funcione como mi CPU. Tampoco ningún chip que integre video de la manera que lo hace Vircon32... y tampoco se puede alterar el funcionamiento de Vircon para adaptarlo a chips comerciales, porque entonces los juegos ya no funcionarían (los binarios son los mismos para cualquier implementación de Vircon).

La única solución para hacer eso sería una FPGA que simule el hardware de todos los chips de la consola. Habría que diseñar un core con VHDL/Verilog, como lo hacen por ejemplo en MiSTer. Pero eso ya se escapa a mis conocimientos.

Exor720

Me parece brutal lo que haces

6 1 respuesta
carra

#596 Gracias! A mi a veces también me parece brutal hacerlo, le dedico muchísimas horas :rofl:
Pero lo hago con gusto, es algo que me hace mucha ilusión hacer. Por algo lo ofrezco gratis...

3
carra

Con los documentos terminados, a día de hoy el proyecto de la consola en sí empieza a estar medianamente completo. Faltan cosillas, pero lo más gordo está todo. El tema del prototipo físico también lo voy a ir mirando, pero ahora mismo mi prioridad es hacer más cosas para la consola: juegos y algunas demos. Me gustaría probar a hacer cosas de bastantes géneros, para enseñar lo que puede dar de sí la consola. Y por eso ahora mismo estoy un poco con varios proyectos a la vez.

Uno de ellos es una prueba de concepto para un juego beat'em up, estilo Final Fight. Para estos juegos lo que más cuesta es dibujarse las animaciones de los personajes, que además son relativamente grandes. Así que para esto me estoy buscando la vida. En Fiverr hay dibujantes y artistas pixel art, pero esto saldría demasiado caro. En cambio hay otras personas que te dibujan poses tipo ejercicio/yoga. No son los más detallados y no te permiten personalizar mucho el personaje, pero salen baratos y dibujan bien las posturas. Son un buen punto de partida. Dibujar todas las poses de un personaje desde cero me llevaría infinito, pero se me da bien modificar imágenes y hay algunos trucos para limpiarlas y pasarlas a pixel art. Así que he hecho este pequeño experimento para ver que esto me podía ser viable:

Después también puedo dibujar cambios en la ropa, cara, pelo o tipo de cuerpo para hacer personajes distintos. Llevará cierto trabajo pero para hacer una demo o juego cortito con pocos personajes se puede hacer. Luego, para que os hagáis una idea, he hecho este test de cómo se podría ver este juego en la pantalla de Vircon32:

6
carra

Y ya que no me llevaba mucho tiempo, he hecho también esta imagen de cómo podría verse un juego de lucha en Vircon32. Seguramente los personajes debieran ser un poquito más pequeños, para dar más margen a los saltos y ataques aéreos...

9
carra

He estado trabajando con Vircon en las Raspberry. En la Pi 3, por más cosas que he intentado no he sido capaz de que me active bien la aceleración hardware. Así que la doy por descartada. En cambio, en la Pi 4 no me ha costado mucho esfuerzo hacerlo. Solo he tenido que arreglar la configuración de los menús de ImGui, que no se veían por un problema de shaders, pero ahora todo funciona bien.

Y por fin he podido hacer las pruebas de rendimiento. Si recordáis, estaba pendiente de esto para tomar la última decisión que quedaba en el diseño de Vircon32: la velocidad final de la CPU. Estaba a 9 MHz y si la Pi 4 lo corría sin problemas quería subirlo a 12. Bueno pues resulta que la Pi 4 da más rendimiento de lo que pensaba. Así que he tomado la decisión de que la velocidad final suba a 15 Mhz!!

Esto ya es un incremento importante (67%), y aún con eso la Pi 4 lo va a manejar sin problema. Con esta velocidad se van a poder hacer más fácilmente efectos pseudo 3D, o manejar más objetos a la vez (por ejemplo, poner muchas balas en un shot'em up). Lo único, mis disculpas a @r2d2rigo, que no pudo usar esta velocidad y se tuvo que poner a optimizar su Virconstein3D con ensamblador por todas partes por eso... :dizzy_face:

Ya he actualizado esto en las especificaciones y en la web, y me falta actualizar una de las guías. Ahora lo siguiente será crear una nueva release del emulador en la que incorpore no solo los 15 MHz, sino también los pequeños fixes que han ido saliendo últimamente, y la versión de los binarios para Raspberry.

10