¡Oh no! ¿Dónde está el JavaScript? El navegador Web no tiene JavaScript activado o no es compatible con JavaScript. Active JavaScript en su explorador Web para ver correctamente este sitio Web o actualizar a un navegador Web que admita JavaScript.
Sabías que...
El grupo japonés liderado por Hideki Sato, asentó que el procesador que utilizarían en Dreamcast seria un Hitachi SH4.

Compila Libronin 0.5!!

Última actualización en 9 year hace
IndiketIndiketAdministrador
Publicado 9 year hace
Hola amigos!! Bienvenidos a una nueva entrega de las aventuras de un desarrollador de la Dreamcast!! Jajaja, hoy aprenderemos qué es libronin, cómo compilarlo y disfrutarlo!! Así que relájense, vayan a buscar su bebida / comida / peluche favorito, y vuelvan para ver un apasionante viaje!!

Aviso: Tutorial de dificultad media / avanzada. Debes saber un poco sobre KOS, y al menos, tener una toolchain de Dreamcast funcional.

Libronin, ¿"ezo que eh"?

Reconocerán que la gran mayoría del homebrew de Dreamcast, se basa en KallistiOS, un excelente sistema operativo para la consola con multitud de funcionalidades, y aún dando mucha guerra (un gran saludo para el maestro BlueCrab!). Pero amigos, no es el único. Hay otro OS, más liviano (no menos potente!) llamado libronin.

Lo más importante: libronin NO ES ninguna librería o módulo de KOS!. Tiene una instalación completamente diferente y independiente, e incluso diría yo su filosofía!

Libronin es desarrollado y mantenido por Marcus Comstedt. Quizá los más novatos no os dice nada, pero si os digo que es el responsable oficial de SCUMMVM, y que su librería se ha usado para hacer SCUMMVM, Cave History y otros emus, la cosa cambia :)


¡Me gusta me gusta! ¿De dónde me lo bajo?

¡¡Eeeh, quieto parao!! Aquí no encontrarán ningún binario amigos, tocará compilar y compilar :) . Empecemos por lo básico.

El repo "oficial" de la libronin está alojado en BitBucket: https://bitbucket.org/ihi/libronin (Tip: Den una ojeada a otros proyectos de Marcus ;)

La última versión es la 0.5, pero utilicen GIT para clonar el repositorio (tiene algunos ejemplos que no están en la distribución).

git clone https://bitbucket.org/ihi/libronin.git


Les recomiendo que lo pongan en un lugar diferente de KOS, por ejemplo en "/usr/local/ronin".


Requisitos

Para compilar libronin se necesitan los siguientes componentes:

* GNU Make
* GCC - configurado como cross-compiler para sh-elf , lo que llamaríamos la "Toolchain". Si tenéis KOS no os hará falta hacer uno nuevo :) . Para este tuto uso un GCC 4.7.0.
* Binutils - configurado como cross-compiler para sh-elf . Lo mismo, si tenéis KOS lo reaprovechamos.
* Newlib - compilado para sh-elf. ATENCIÓN: aquí NO nos servirá el de KOS!! El de KOS está parcheado y no será válido, así que tendremos que compilar un newlib estándar (más adelante os lo explico!).

El pack de libronin lleva, además de la librería en sí, la zlib y la libmad (MP3), siendo esta segunda opcional de compilar.

[.....]

¿Y ya está? Hmmm no, me reservo lo mejor para el final!! ^^ . Nuestro amigo Marcus le gusta usar PIKE: es un lenguaje de programación dinámico con una sintaxi similar al Java y C. Así pues...
* Pike - la versión 7.8.X será más que suficiente.

¿Queda claro? Supongo que sí, así que... continuemos!!


PIKE

Es cierto que se puede compilar libronin sin PIKE pero, luego hay varias tools y otros programas que lo usan, y además no es muy complicado! Aquí se dividen dos grupos:

LINUX (Ubuntu)

sudo apt-get install pike7.8-core


Y ya se pueden ir a jugar al parque! :-P . Averigua dónde se instaló el paquete (suele ser en /usr/local/bin), con un whereis debería ser suficiente.

MAC OS X

brew install pike


Y se unan a la fiesta con los Unixeros! :-P

WINDOWS (Cygwin/MinGW)

Lo primero, olviden de intentar compilar PIKE en Cygwin: simplemente no funciona. Haremos algo MUCHO más simple! :D

- Descarguen la versión Windows binaria de aquí: http://pike.lysator.liu.se/
- Instalen el .msi, opciones por defecto.
- Ahora el truco del almendruco: para que Cygwin pueda llamar a "pike", deben añadirlo en el PATH de Cygwin. Para hacerlo temporalmente, abran la ventana de Cygwin y ejecuten (no se olviden de las comillas):

export PATH=${PATH}:"/cygdrive/c/Program Files (x86)/Pike/bin" 


Ahora ya pueden llamar a pike y se ejecutará correctamente! Recuerden, cada vez que abran una ventana de Cygwin, tienen que poner el comando (o lo guardan en su profile).


Configurando Paths

Hemos de añadir a nuestros PATHS la ruta de dónde se encuentra nuestro compilador sh-elf-gcc y arm-elf / arm-eabi !! La ruta dependerá de cada instalación de KOS, pero por defecto suele estar aquí:

 export PATH=${PATH}:"/opt/toolchains/dc/sh-elf/bin/":"/opt/toolchains/dc/arm-eabi/bin"


MUY IMPORTANTE: NUNCA CARGAR EL ENTORNO KOS!! (el environ.sh). Con esto le decimos a la libronin y al newlib dónde encontrar nuestros compiladores :)

Tip: Pueden añadir las líneas export en .bashrc, así cada vez que abran Cygwin ya lo recordará!


Paso 1: Nueva newlib

Una vez seteado nuestro path, lo primero es compilar una nueva Newlib. Por fortuna, no hay que aplicarle ningún parche especial, y puede residir junto a la newlib del KOS :)

a) Descargar de aquí: ftp://sourceware.org/pub/newlib/

Si tienen un GCC 3.X, elijan una versión conservadora (1.12.0).
Si usan ya GCC 4.X, vayan a por la última (2.1.0): versiones anteriores les fallará la compilación.

b) Descompriman en una carpeta de su home, y entren dentro de la carpeta newlib.

c)
./configure --target=sh-elf
make


Pueden usar un --prefix y luego un make install, para instalar la librería en otro directorio (más limpio jeje). Tardará un rato, así que tomen un sorbo o coman una manzana ;D


Paso 2: Preparando Makefile de libronin

Bien!! Ya estamos muy cerca :D . Ahora, vayan a la carpeta de la libronin y abran el Makefile: debemos de hacer algunas modificaciones :)

1) Si usan GCC > 4.7.X , o en otras palabras, tienen"arm-eabi" en vez de "arm-elf", deben substituir todas las referencias de "arm-elf" a "arm-eabi".

2) Las variables NETSERIAL y NETCD: si usan un BBA, pongan a 1 NETSERIAL (en el siguiente post, más info).

3) TYPE: Por defecto compila en ELF (filosofía libronin, más info en el otro post). Lo dejamos tal cual.

4) LINK: Aquí debemos de añadir la ruta de nuestra preciosa "newlib" , para que la use en vez de la del KOS! Un ejemplo:
LINK=$(CPUFLAGS) -nostartfiles -nostdlib $(INCLUDES) -o $@ -Llib -lz -lronin -lgcc -L/home/indi/newlib-2.1.0/sh-elf/newlib -lc -lgcc

Nota: En Makefiles de otros proyectos, lo tendréis que tener en cuenta!

5) DISTHEADERS: Por defecto, libronin compila con un fichero llamado "notlibc.h", que es como un fichero "basura" por si no tenemos una libc. Da más problemas, y como ya hemos compilado una, lo tenemos que quitar. Así pues, borrad "notlibc.h"

6) OBJECTS += notlibc.o : Lo mismo, comentad esta línea (os habéis dado cuenta que está separada? jejeje).

7) EXAMPLES: Los examples están mal, los correctos son estos:

EXAMPLES = examples/ex_serial.$(TYPE) \
      examples/ex_video.$(TYPE) \
      examples/ex_vmsfscheck.$(TYPE) \
      examples/ex_gtext.$(TYPE) \
      examples/ex_showpvr.$(TYPE) \
      examples/ex_malloc.$(TYPE) \
      examples/ex_videomodes.$(TYPE) \
      examples/ex_clouds.$(TYPE) \
      examples/ex_control.$(TYPE) \


8) ARMFLAGS: Para entornos GCC 4.X, debemos de añadir este flag: -mno-thumb-interwork

9) arm_startup.o: En este parte debemos de cambiar -marm7 por -mcpu=arm7, quedando así (yo uso arm-eabi):

arm_startup.o:
   arm-eabi-as -mcpu=arm7 arm_startup.s -o $@ $<



Paso 3: Revisando los PIKE

Finalmente, en la carpeta /tools, tenéis 3 scripts PIKE. Debéis abrirlos y ajustar la ruta de ejecución (si es necesario), para encode_armcode.pike y ipupload.pike

En Cygwin, por ejemplo sería:


Paso 4: COMPILAR!!!

Por fin dreamers!!! Tenéis cargado los PATHS de PIKE y las rutas del sh-elf? Habéis editado el Makefile tal y cómo os comento? Lo que queda es pan comido ahora!!

Entrad en la carpeta de la libronin, y ejecutad:

>> make clean
>> make all


Es MUY IMPORTANTE hacer el make con el ALL, ya que de esta forma nos compilará 2 libs, la que usa el puerto serial y la que no!

Si habéis tenido éxito, os aparecerá dentro de la carpeta libs los siguientes ficheros:

* crt0.o
* libronin.a (la lib de DEBUG)
* libronin-noserial.a (la lib de RELEASE)
* libz.a (es un symlink a la librería que está en /zlib)

También os recomiendo compilar los ejemplos, así podréis detectar si tenéis mal vuestra newlib, o cualquier cosa. Si os va bien, os saldrán ficheros ELF (que no son elfos!) jajajajajaaja.

>> make examples



Paso 5 (Opcional): MadMP3

Compilar esta librería es un juego de niños :) . AVISO: La versión del repositorio es antigua, la 0.12.5b. SCUMMVM necesita la 0.15.1b para compilar!!

Para GCC > 4.7.X Abrid el Makefile de dentro de libmad y haced estos dos cambios:
- Reemplazar los "arm-elf..." por "arm-eabi..." (hay 3)
- Añadir al ARMFLAGS: -mno-thumb-interwork

Luego ejecutad make. Copiáis libmad.a en libs, y mad.h en include.

Apunte: El Makefile original compila con arm-eabi, y tenemos nuestras dudas ya que los binarios del propio Marcus son con sh-elf. Si no os funciona... recompilad con sh-elf!!


RESUMIENDO En esta entrega hemos conseguido compilar la libronin básica (sin libmad) en un entorno Unix / Windows, a partir de nuestras toolchains existentes, y listo para entrar a la acción!!!
En el siguiente post, os explicaré cómo funciona la libronin, y lo más importante, cómo ejecutar nuestros programas :D


Considérenlo un pre-regalo de la RetroMadrid 2014 jejeje ;) Un gran saludote!!

Info interesante: http://dcemulation.org/phpBB/viewtopi...;p=1011157
IndiketIndiketAdministrador
Publicado 9 year hace
En el anterior post vimos la configuración + instalación de libronin, ahora vamos a aprender a usarla!

Entendiendo a libronin

En libronin hay dos entornos bien diferenciados:

DEBUG: En este entorno, se compilan en ficheros ELF usando la libronin.a . Los ficheros utilizan como output por defecto el puerto SERIE. A diferencia del KOS, que la salida por defecto es la consola (cuando ejecutamos en el emu o vía dc-tool, los mensajes salen allí), aquí no: todos los mensajes salen a través del puerto SERIE!

RELEASE: Para las releases, se generan ficheros BIN usando la libronin-noserial.a, y tienen la propiedad -DNO_SERIAL activada.

En pocas palabras: aquí no valen los printf... y el comando que se usa por defecto (report) , lo saca por el SERIAL xD .

Flags NETSERIAL y NETCD (en el Makefile de libronin)

Con NETSERIAL, redireccionará la salida SERIAL a través del puerto Ethernet. Es imprescindible para los que tengan BBA, para poder recibir las respuestas de los programas.
Con NETCD, emula la unidad GD a través del Ethernet. Como la función del DC-TOOL para incorporarle ficheros vía CDFS.

Como nota final, si usamos el modo RELEASE, la salida SERIAL se desactiva independientemente de si usamos NETSERIAL o no: simplemente los mensajes se perderán al limbo :D


¿Cómo enviar cosas vía BBA?

Los que usen KOS sabrán de la herramienta dc-tool, y su correspondiente CD para cargar el homebrew. Bien, pues con libronin esta herramienta NO sirve! jejejeje. Entre varias diferencias, DC-TOOL usa UDP 31313 y libronin UDP 4711, con otro protocolo diferente.

Para ello, usaremos la utilidad IP-SLAVE + el script ipupload.pike. Señores, es el COMBO ganador, definitivo :D

Ahora bien, es interesante destacar que sólo los ELFs (DEBUG) se pueden enviar con este sistema!! Las RELEASES bin se pueden ejecutar con DC-TOOL en KOS, claro, por esta razón el SCUMMVM de releases nos funciona en KOS / EMUS, pero no funcionan los "daily builds" al ser versiones DEBUG!

DREAMCAST

a) Necesitamos un nuevo disco para ejectuar el IP-SLAVE. Descargaremos la versión V1.002: http://mc.pp.se/dc/ipslave.html
b) Ese fichero contiene un BINARIO, que podemos generar un CDI con BootDreams y quemarlo con nuestro programa favorito.
c) Arrancamos con el CD y, ¡oh sorpresa! Una pantalla naranja nos indica que ya está a punto de recibir metralla! :D . Nos apuntamos la MAC del BBA.

PC

a) Utilizaremos el truco del ARP para configurarle una IP:
sudo arp -s 10.0.0.3 00:11:22:33:44:55


b) Abrimos el fichero ipupload.pike, y le cambiamos la parte de "constant dreamcast" por nuestra IP
constant dreamcast = "10.10.10.3";


c) Atención! Ahora viene el truco!! Para enviar un ELF a la consola:
pike ipupload.pike < "../ruta/fichero.elf"


Lo que hacemos es inyectarle directamente el binario al script!! Este lo leerá (como stdin) y lo enviará a la consola. Cuando termine la ejecución, se desconectará y la consola empezará a ejecutar.
Notaréis que se queja de que no sabe como redirigir la salida del SERIAL...


¿Cómo ver la consola vía BBA?

Ok, primero de todo, aseguraros que vuestros ELF se han compilado con el flag NETSERIAL = 1, y están en modo DEBUG.

En nuestra carpeta tools, hay un script que se llama "ipconsole.pike"... lo adivináis? Sí, exactamente, con esa utilidad veremos las respuestas que van por el puerto serie, como los report() o serial_puts()!!

Antes, debemos de hacer un par de arreglos: abrid el fichero ipconsole.pike y haced estos cambios:

Línea 134: reemplazar por esta línea.
werror("[getdir] No file %O\n", combine_path(fds[fd][0], fds[fd][pos+1]));

Línea 187: eliminadla (es un SIGNAL que no sirve).

Y cómo funciona? Fácil: necesitáis tener dos ventanas abiertas. En la primera, ejecutáis:
>> pike ipconsole.pike

Se queda esperando las respuestas de la consola :)

En la segunda ventana, lanzáis vuestro ELF con el ipupload.pike. Si todo va bien, iréis viendo lo que lanza la Dreamcast en la primera ventana... genial!!
Editado por Indiket en 20-04-2014 19:13, 9 year hace
IndiketIndiketAdministrador
Publicado 9 year hace
DC-VIRTCD

Hará como 2 años, Marcus Comstedt, el creador de libronin y mantenedor del SCUMMVM de DC, y en definitiva, uno de los padres de la Dreamcast scene, lanzó "dc-virtcd," un proyecto para lanar juegos de Dreamcast a través de Ethernet vía el Broadband Adapter (BBA).

https://github.com/zeldin/dc-virtcd

DC-VIRTCD tiene dos targets: el host es el ejecutable en la banda del PC, que se encargará de enviar los juegos, y el target, que es el binario que se ejecutará en la Dreamcast y recibirá los datos.

Pues bien, el target está programado usando PIKE :) , cosa previsible viniendo del gran Marcus. Soporta imágenes ISO y NRG.



Sin embargo, la realidad no es tan fantástica como la teoría... la velocidad es muy lenta, incluso más que con el puerto SD, y la compatibilidad es muy baja. Así que lo apuntamos como concepto interesante, pero es mejor centrarse en el G1-ATA :D
Editado por Indiket en 01-06-2014 22:15, 9 year hace
puede ver todos los hilos de discusión en este foro.
puede iniciar un nuevo hilo de discusión en este foro.
no puede responder en este hilo de discusión.
no puede empezar en una encuesta en este foro.
puede cargar archivos adjuntos en este foro.
no puede descargar archivos adjuntos en este foro.
Afiliados
SEGA Saturno - Saturn, SEGA y Videojuegos