[Devlog] Vircon32: Creando mi propia consola

carra

#390 Ah pues igual echar un vistazo me va guiando un poco gracias tío!

carra

Creo que he llegado a un punto donde tengo ya encaminado el port a Raspberry. He estado avanzando por estos dos frentes:

  • Ya tengo montado un mini-core de libretro, que no tiene nada de Vircon pero hace los procesos básicos: define el mando, el audio y el video, lee los inputs, dibuja en pantalla y genera sonido. Me faltará ver cómo montar algunas otras partes como la carga de juegos y el guardado en memory card.

  • Por otro lado, muchos sistemas como la Raspberry no soportan el OpenGL completo sino la versión OpenGL ES 2.0. Esto me obliga a cambiar las rutinas gráficas del emulador por otras que usen shaders. Ya he podido hacer un programa que crea un contexto GLES, carga una imagen como textura y la dibuja con shaders aplicando los efectos que soporta la consola (glColor y los modos de color blend). Por suerte los gráficos de esta consola son muy sencillos de emular.

Con estas 2 cosas creo que ya tengo una buena base para portar Vircon32 a libretro (usado en Retroarch y RetroPie). Retroarch es multiplataforma, así que hacerlo así hará que la consola pueda funcionar también en otros sistemas: móviles, consolas... vamos que ya no va a haber mucho problema para jugar a Vircon :D

Y ahora, con este tema ya en marcha, me voy a tomar unos días de pausa con el tema de ports y voy a intentar aprovechar para hacer el juego del solitario que tenía pendiente.

2 1 respuesta
thenanox

#392 esto significa que cualquier cosa hecha con el vircon actual, no seria compatible con el nuevo vircon?

1 respuesta
carra

#393 No, las roms siguen funcionando igual. La consola en si no ha cambiado, es solo que la implementación de cada versión del emulador puede ser distinta.

1 respuesta
thenanox

#394 oka, es que al leer la parte del cambio de OpenGL a OpenGL ES 2.0, me dio la sensacion de que iba a cambiar algo de la parte grafica de vircon. en ese caso, chapo

1
carra

Acabo de subir una nueva versión del editor de regiones. No tiene funciones nuevas pero corrige un molesto bug que hacía que a veces no se actualizara bien la selección y sin querer podíamos acabar pisando una matriz después de crear o editar una región.

Ya puestos he incluido también el editor de regiones en el repo de ComputerSoftware. Al ser una aplicación .Net este programa no va con CMake sino que usa una solucion de Visual Studio.

carra

Una pregunta a los que sabéis. Me gustaría crear unos binarios descargables para Linux y Mac, como mínimo los del emulador (y a poder ser también las dev tools), para que la gente no tenga que estar compilándolo. ¿Cómo se podría hacer? De hecho aunque los creara con un cross-compiler tampoco los podría probar...

1 respuesta
neZbo

#397 Desde mi ignorancia total ¿Has pensado en máquinas virtuales para generar los binarios y probarlos? Para linux debería ser sencillo con VirtualBox, para MacOS creo que necesitarás a alguien con un mac que te eche un cable.

1 respuesta
carra

#398 Pues lo había pensado, lo que no sé es la cantidad de trabajo que puede suponer instalar y configurar todo lo necesario. Aparte yo en Linux me manejo sólo para cosas básicas, y Mac ni lo he tocado. Por otro lado no sé si en Linux se puede crear un binario o paquete "universal" o habría que hacer N para las diferentes distribuciones (lo cual multiplicaría el trabajo)

1 respuesta
neZbo

#399 Mis conocimientos de linux también son básicos, pero creo que creando un paquete .deb y un .rpm tendrías compatibilidad con un porcentaje altísimo de distros. Para MacOS como he dicho creo que necesitarás ayuda de terceros, hasta hace poco tenía un iMac y podríamos haber trasteado un poco, pero ya lo vendí :S

Me suena que @kidandcat y @Kalgator son usuarios de MacOS e igual te pueden echar un cable.

1 3 respuestas
thenanox

#400 yo tengo un mac disponible para verificar si tira

1 1 respuesta
Kalgator

#400 Na, yo no tengo MacOS, solo iOS xD, vamos un iphone to flama que te cagas

carra

#400 Si son solo 2 distribuciones ok, puede ser viable. Gracias!
#401 Has intentado compilar lo que hay en github? No sé si tienes compilador instalado, imagino que gcc o algún derivado existirán en mac, igual que en Windows con MinGW/MSYS

2 respuestas
neZbo

#403 De hecho sólo con un .deb creo que ya llegarías a un porcentage de userbase bastante elevado pues debería funcionar en todas las distros basadas en Debian, por ejemplo Ubuntu.

1 respuesta
carra

#404 Vale puedo tomar el .deb como prioritario y si sale bien hacer luego el .rpm

1 respuesta
neZbo

Una vez tengas el .deb no creo hacer el .rpm difiera demasiado, sólo el rollo de tener que instalar otra máquina virtual.

1 respuesta
carra

#406 Es curioso, no sabía que la proporción de algunas distros era tan pequeña

thenanox

#403 no lo he probado. aunque con mac creo que utiliza uno propio clang++

1 respuesta
carra

#408 Vale el compilador que se use no debería ser muy importante. Lo estaba pensando más por el lado de las dependencias, para que las puedas buscar como paquetes y no hacerte compilar SDL2, TinyXML2, etc

eondev

#405 no necesitas ningún empaquetado, ni .deb ni .rpm.

En Linux generas un binario y ya está. Si debes añadir libs los distribuyes en el mismo zip junto con el binario y listo.

1 respuesta
carra

#410 Pero si genero unos binarios por ejemplo en debian, servirían los mismos para otros linux?

1 respuesta
eondev

#411 sí, las dependencias las generas contra libc y derivados del sistema. Con ldd puedes ver las dependencias de tu binario, si hay alguna que es propia puedes compilarla estáticamente para llevarla incluida en el binario.

1
carra

He estado tratando de arrancar un ubuntu en VirtualBox. Por ahora no ha habido suerte, y cuando lo he intentado configurar para arreglarlo... ¡Pantallazo azul! Yo creo que hacía años que no me saltaba ya uno jeje. En fin, estos días lo seguiré intentando.

Edit: Ahora sí, ya me he podido instalar ubuntu y añadirle todo lo necesario. A ver si mañana logro compilar, creo que tendré que hacer algún ajuste al CMake para las liberías GTK con el que no contaba.

carra

@thenanox, no intentes aún compilar en Mac. He detectado un error en el CMake, esta tarde lo arreglo. Ahora mismo tiene hardcodeado que el target para la librería osdialog es siempre Windows :sweat_smile:

1 1 respuesta
thenanox

#414 oka, escribeme por privado, y dime si tengo que hacer algo especifico y lo veo

1
carra

Después de algunas correcciones he conseguido compilar en Ubuntu el emulador y las dev tools. Todavía hay alguna pega al ejecutar el emulador, pero creo que serán arreglos fáciles.

1
carra

Ahora sí, ha compilado y funcionó a la primera :blush:

Ahora me queda rastrear todas las librerías compartidas que necesita cada programa e incluirlas en la instalación para que funcione sin instalar nada más.

4
carra

He visto también que hasta ahora estaba creando programas de la consola siempre con scripts BAT. Ahora he añadido a todos los programas también los scripts de make para Linux (archivos .sh, para la shell bash). Por lo que tengo entendido en Mac también se pueden ejecutar los scripts de bash así que si no me equivoco deberían servir para ambos (y con eso las build de juegos ya serían completamente multiplataforma).

1
carra

Informe de hoy.

Por un lado tenemos progresos:

  • Las herramientas de desarrollo ya funcionan bien en Linux.
    Un error muy curioso, ya que el valor de string::npos era distinto en ambas máquinas. No por ser Windows o Linux, sino por la diferencia 32 / 64 bits.

Y por otro lado problemas:

  • Algo se está haciendo mal en la librería osdialog. Cuando intenta abrir un diálogo para abrir archivo el programa peta por errores de GTK. Yo he sido capaz de abrir un diálogo GTK con mi propio código, así que o bien haré modificaciones a osdialog o haré mi propia versión de estas funciones de abrir/guardar. Pero preferiría no tener que reinventar la rueda.
  • El emulador no tiene sonido. O mejor dicho, lo tiene pero solo suena unas décimas de segundo cuando el programa gana o pierde el foco. El audio tiene su propio thread así que supongo que el error está en mi propia gestión de la pausa/reanudación del sonido por eventos de la ventana. (que usando SDL debería funcionar igual que en Windows, pero en fin).
  • También he visto que si instalas el emulador o las dev tools, cuando las instalas, al estar en carpetas de sistema no pueden generar archivos de log por temas de permisos. Esto es una faena si a alguien le producen errores, ya que no habrá logs para encontrarlos. De momento no sé cómo solucionar esto.

En fin, que hacer todo multiplataforma me va a suponer unas cuantas horas más de lo previsto.

1 1 respuesta
neil90

#419 En linux los binarios no escriben logs en la ruta donde están instalados, si no en /var/log o lo mandan a syslog.
Dado que es una aplicación de usuario standalone y no un daemon, puedes usar el home del usuario:

https://wiki.archlinux.org/title/XDG_Base_Directory

En linux es $HOME, en windows es %USERPROFILE%.

El único problema que se me ocurre con esto es la concurrencia en la escritura si el usuario abre varias instancias.

1 1 respuesta