Port para Haiku y otros

Started by Lt_Henry, September 23, 2009, 07:29:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Lt_Henry

Bueno, pues noche a noche estoy intentando portar Bennu a Haiku. Es un poco jodido porque ahora mismo hay una liosa mezcla de librerias compiladas con gcc 2.95 y gcc 4.3. De todas formas ya he conseguido portar el compilador y el interprete, y me estoy pelando ahora con los modulos. Pero si no pasa nada raro deberia de poder, pues las dependencias se cumplen todas.

Un par de cosas para comentar a los mas gurus del tema... como resolveis la dependencia con libdes? en Haiku me he compilado yo mismo la libreria, pero en Linux no esta en los pool de Ubuntu, es eso normal? Y por lo que veo, se usan las utilidades MAP y FPG de fenix no? Podriamos tenerlas en el repositorio tambien. Mi idea es hacer un editor de FPG/Map para Haiku, los formatos de 16/32 bits estan documentados?

En fin, se aceptan sugerencias ! Un saludo

DCelso

PRG hizo un editor con código bennu, así que si portas bennu ya tienes un editor de fpgs.
En cuanto al código de fpg y map, están disponibles en el CVS del proyecto fenix.
A
lo de libdes, en el código de bennu está el código fuente de éste, además no crea una librería dinámica, sino una librería estática que luego es unida al binario final. Por lo que tengo entendido como es una librería de seguridad, para hacerla más segura lo mejor es no usar una generíca sino bajarte el código fuente, cambiarla un poco y compilar la tuya propia.

En este foro ya hemos debatido alguna vez sobre los formatos de 16 y 32 bits. Yo mismo porté fpgedit, fpg.exe y map.exe a 32 bits.
Pero no tienen ningún misterio si ya conoces el de 8, es solo cambiar el valor de la cabecera que corresponde a la densidad de color y luego tratar los datos de la imagen como:
* 16 bits: array de datos de 16 bits donde el rojo son 5 bit, el verde 6, y el azul 5. Si el dato de 16 bits es un 0, bennu lo interpretará como transparente y no lo dibujará en la pantalla. Este formato es un poco extraño porque el orden de guardado es GBR y porque lo normal es trabajar con valores de componentes de 8 bits para RGB(de 0 a 255), para pasar de 8 bits a 5 hay que hacer un shift de 3 y para pasar a 6 un shift de 2. Asi que: R5= R8 shr 3, G6= G8 shr 2 , B5= B8 shr 3
Como este formato no estaba en DIV el creador de fenix lo diseño así, no se el motivo, pero el creador de CDIV optó por otro formato de 16 bits distinto, no se si porque no le gustaba este o por desconocimiento de él, aunque a nivel práctico la única diferencia entre ellos es la forma de guardar los datos que en esté último lo hace en forma RGB. Bennu no da soporte al formato cdiv.

Yo, para suplir esta pérdida de datos, dí soporte a map.exe, fpg.exe y fpgedit para un nuevo formato de 24 bits para guardar así 8 bits por componente RGB. Pero actualmente ni bennu ni fenix ni ningún divlike da soporte a ellos así que es bastante inútil por ahora :D

* 32 bits: array de datos de 32 bits donde el rojo son 8 bits, el verde 8, el azul 8 y luego hay 8 más para la componente alfa que define cómo de tranlúcido será el bit. Donde 0 es el transparente, los valores intermedios son translúcidos incrementando su opacidad hasta llegar al 255 que es opaco. Esta forma también es la que usan la mayoría de programas y sistemas operativos para guardar o mostrar las imágenes en 32 bits. Esto hace que en el caso de fpgedit este formato sea más rápido a la hora de guardarse y cargarse que el de 16 bits ya que no conlleva preprocesamiento de cada pixel.
Este formato entró con Bennu, desconozco si ge..ix usa el mismo o se ha inventado uno propio.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

josebita

En cuanto a libdes, en el directorio vendor del svn viene la librería. Para mi repositorio de Ubuntu lo que he hecho es empaquetar la librería. Además, como se compila estáticamente, sólo hay que instalarla si se quiere compilar Bennu.

Drumpi

Yo tuve que compilarme la libiconv tambien para que funcionase en GP2X, pero una vez hecho, cambiando un par de cosillas en el makefile ya debería ir sin problemas (al menos, yo tuve esa suerte, otros no tanto).
Eso si, asegúrate de usar librerías compatibles, que yo lo hice para unas nuevas y cuando los que tenían las consolas con firm oficial (librerías antiguas) lo probaron no les iban.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Lt_Henry

Cierto lo de libdes, sin problemas para compilar. Por cierto, en el core, hay algun archivo que otro con un encoding maligno :D

Drumpi

No se a qué te refieres...
Quizás sea al código que puso SplinterGU para sus planes de dominar el mundo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

¿Algún archivo en UTF8?
o quizaz ¿Algúna archivo en formato MS-DOS?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Lt_Henry

Bueno he conseguido compilar con exito Bennu en Haiku, no obstante hay un par de problemillas. No he modificado nada del codigo, como heredero de fenix ya venia con soporte para plataformas beos-like: -DTARGET_BEOS. Lo que si he hecho es usar otro sistema de construccion, en concreto jam, que es el que usa oficialmente Haiku.

El problema, es que con gcc 2.95 no compila, y falla en un sitio realmente absurdo, de hecho creo que se hace un lio con el encoding. Con gcc 4.3 compila sin problemas. El tema es que Haiku esta compilado contra gcc2, y SDL-gcc4 pues no acaba de funcionar. Y aqui me he quedado, cuando compilo un programa con bgdc , al cargar mod_video.so me da un fallo SDL al no poder resolver una referencia (lo esperado, vaya).

Por suerte, Haiku esta en continuo desarrollo y estoy seguro que en breve habre solucionado el tema de SDL, mientras hablo con los gurus preparare los scripts para instalar y tal.

Que ganas tengo de subir algun screenshot ^ ^ 

DCelso

yo, seguiría intentándolo en gcc2, por lo menos hasta que den soporte oficial para gcc4 los de haiku, no es nada dificil cambiar el encoding de los archivos (si es ese el problema) y en cuanto a código c no creo que haya problemas de compatibilidad, por lo poco que ví de código bennu no se sale mucho del standard c.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

hay que intentar que compile con el sistema official...

gracias... buen trabajo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Lt_Henry

bueno, he usado jam porque todo haiku esta compilado con el, y me aseguraba que los problemas no vendrian por ahi. Con el sistema oficial, he conseguido compilar bgdc y bgdi, pero en el "configure" de los modulos insiste en no encontrar libPNG.

De todas formas, el roadmap es el siguiente:
* que funcione! (supongo que pasara por compilarlo contra gcc2)
* compilar con el sistema oficial
* Herramientas MAP/FPG nativas para Haiku

Vamos a ver hasta donde llego :)

Lt_Henry

Bueno, necesito un pelin de ayuda. Os cuento...

Como actualmente, Haiku esta compilado con gcc 2.95 con el fin de mantener compatibilidad binaria con Beos, compilar con gcc 4.3 suele traer problemas (en este caso con SDL). Asi que me puse a intentar compilarlo con gcc 2.95, o lo que es lo mismo, standard C89.

El primer problema que me he encontrado es que C89 obliga a que las variables locales se definan al inicio de la funcion. El 95% del código cumple esta regla. Con esto no critico nada! Ciertamente es una regla ya obsoleta (y creo que desaconsejada en C99)

El segundo y mayor problema es el encoding del código fuente. Unos son iso-8859 otros utf-8, otros tienen saltos de linea unix y otros wind0zer. He arreglado la mayoria, pero mod_regex lo he dejado por imposible :C

Solucionado esto, ha compilado y he intentado lanzar un programa de ejemplo. Aqui es donde me he quedado enganchado: Resulta que bgdc me dice que no encuentra las constantes y variables de proceso. Por ejemplo "MODE_WINDOW" o "graph". Tiene toda la pinta de que los modulos no estan exportando estos identificadores... pero doy palos de ciego. Podeis guiarme un poco en este problema? (menos mod_regex y mod_fii ha compilado todo)

DCelso

Eso es lo nuevo que tiene Bennu con respecto a Fenix, al estar modularizado, necesitas poner imports de los módulos para todas las funciones o variables o constantes que necesites.
Por ejemplo, intenta poner esto al principio del código

import "mod_key"
import "mod_draw"
import "mod_grproc"
import "mod_proc"
import "mod_file"
import "mod_blendop"
import "mod_cd"
import "mod_crypt"
import "mod_effects"
import "mod_map"

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Lt_Henry

Ya lo habia intentado y no funciona, no se que he hecho pero parece que no se estan exportando los simbolos.