PS2 (Port no oficial)

Started by l1nk3rn3l, December 06, 2012, 11:06:59 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

masteries

Quote from: SplinterGU on January 11, 2013, 02:23:24 PM
todavia no he hecho nada...

Pero lo harás...

ColDev, ya os he enviando el código fuente; junto con información adicional.

masteries


l1nk3rn3l

#17
GRACIAS DE NUEVO .. ESTUDIAREMOS EL CODIGO..



gracias por el video y ya lo incluimos en la pagina del port...

http://code.google.com/p/bennugdplay2/



el link del video creo que esta mal

asi esta mejor como la mandaste al mail..


http://www.youtube.com/watch?feature=player_embedded&v=Sjz_zElwVCI



gracias y ya te di el karma que te mereces ya que tanto trabajo y deberiamos regalar karmas por monton



masteries


Continuo trabajando en el port a PlayStation 2,

Ahora estoy mirando que puede suceder con el audio y SDL mixer...

Parece ser que alguien también tuvo los mismos problemas al utilizar
SDL mixer, pero lo solucionó modificando la prioridad del hilo principal y
del hilo de audio (thread principal y el thread de audio):

http://psx-scene.com/forums/f19/call-help-fixing-sdl_mixer-64678/

A ver si me entero de cómo ir haciendo eso en la Play 2.


l1nk3rn3l

ANIMOOOOOO.. QUE LLEGAS A LA METAAAA..

masteries


hahahahaahahahahah   8)

¡Objetivo conseguido!

Ahora el sonido funciona perfectamente
(ahora el hilo de sonido funciona en modo preemtivo en el Sistema Operativo en Tiempo Real de la PS2),
aunque de momento sólo he probado .wav,
los mismos sonidos y músicas en .wav que en
la versión para GP2X F100/F200 de Masteries Runners.

El rendimiento de BennuGD en PlayStation 2 es similar al que tiene Fénix 0.92a
en una GP2X F100/F200 overclockeada a 275 Mhz, con la salvedad de que en
PlayStation 2 sólo se puede utilizar el color de 32 bits mientras que en GP2X
este rendimiento sólo se logra con color de 8 bits. Por lo que en PS2 no hay que
preocuparse por la paleta de color. Se deduce que BennuGD en PS2 rinde mucho mejor
porque funciona igual de bien y encima a color de 32 bits,
pero es para que os hagáis una idea de los juegos que podéis llegar a ver.



Mañana publicaré la versión Beta 1 de BennuGD para PlayStation 2.
Créditos y gracias a Colombian Developers por el port inicial (y por el instalador del SDK),
y como segundo autor del port: Masteries por la optimización y depuración para PlayStation 2

Temas pendientes del port de PS2:

-Añadir soporte para vibración en el mando.
-Afinar los recursos necesarios para el mezclador de audio, no darle más de lo necesario pero tampoco quedarse corto.
-Guardar partidas y/o otros datos en la memory card, opción especial para juegos Bennu pensados para PS2; en otras plataformas escribir a disco como de costumbre.
-Tratar con Splinter el tema de dar soporte a otras paletas de color inferiores a 32 bits.

Próximos juegos que van a estar disponibles para PlayStation 2:

-FireWhip, versión con posibilidad de grabar la partida a la Memory Card   (De Coelophysis, Masteries y Chipan)
-Viaje al Centro de la Tierra (De Masteries y Coelophysis)

SplinterGU

a ver...

- cuenta que has hecho para solucionar el sonido... que has tenido que tocar y demas... puede que sirva para corregir otras plataformas... como sea, cuenta...

- aun no he puedo soporte de BGR porque el blitter actual de bennugd esta hecho un desastre... ya llevo tiempo intentando solucionarlo, y si bien estoy cerca, aun no termina de funcionar bien... y si no lo logro hacerlo tendre que tirarlo y reemplazarlo por algun otro... (podria usar el blitter de div2? habria problemas de licencia?) (acepto sugerencias o ayuda)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

masteries

#22
Quote from: SplinterGU on January 20, 2013, 01:26:13 AM
a ver...

- cuenta que has hecho para solucionar el sonido... que has tenido que tocar y demas... puede que sirva para corregir otras plataformas... como sea, cuenta...

- aun no he puedo soporte de BGR porque el blitter actual de bennugd esta hecho un desastre... ya llevo tiempo intentando solucionarlo, y si bien estoy cerca, aun no termina de funcionar bien... y si no lo logro hacerlo tendre que tirarlo y reemplazarlo por algun otro... (podria usar el blitter de div2? habria problemas de licencia?) (acepto sugerencias o ayuda)

Respecto al sonido, a diferencia de lo que algunos desarrolladores habían planteado, SDL mixer no parece estar incompleto en lo que a sus funciones de mezclador de audio se refieren.

Lo que sucede es que PlayStation 2 es una arquitectura diferente de un ordenador PC, en realidad es una arquitectura orientada a control en Tiempo Real, y como tal, los distintos periféricos como el vídeo, el audio, ethernet, el mando... son manejados mediante unos hilos de ejecución gobernados por el Sistema Operativo en Tiempo Real que lleva la PS2 dentro, en su memoria ROM. El tiempo de muestreo mínimo que parecen aceptar estos hilos es de 1 milisegundo.

La gestión del tiempo que tiene disponible cada hilo es responsabilidad del programador y no del sistema operativo; de momento lo que he hecho ha sido localizar la función principal de BennuGD, que está en interpreter.c y justo antes de que la ejecución retorne al principio del bucle con la instrucción continue, pues he regalado a los demás hilos 1 milisegundo de tiempo con SDL_Delay(1), si no se hace esto el hilo de audio (el servidor de audio .irx) no puede ejecutarse, pues nadie le ofrece el testigo de ejecución; como ahora el hilo de audio se ejecuta muchas veces por segundo pero tiene muy poco tiempo disponible, pues he reducido el tamaño del buffer de audio para que en cada iteración le de tiempo a mezclar todas las voces de audio en ese buffer y su ejecución quepa en ese milisegundo que tiene disponible.

De todas formas voy a probar con otras configuraciones temporales, para afinar el tiempo necesario para mezclar 8 voces a  22 Khz, de forma que tampoco se robe demasiada potencia al hilo principal.

Sé que esta no es la forma más fina de hacerlo, pero tampoco domino la PlayStation 2 de forma que pueda hacerlo "super-perfecto" y si de esta forma he obtenido un muy buen rendimiento, pues creo que puede hacerse así perfectamente.


Respecto al blitter gráfico, Splinter, si quieres puedo echarte una mano, pues estoy desarrollando un blitter de vídeo para un adaptador vga que estoy desarrollando para una CPU Cortex M4F a 168Mhz, y de momento va bastante bien, así que los conceptos más o menos los manejo bien. Lo que me tendrías que explicar es cómo está estructurado Bennu, cómo va el intérprete y demás y cómo compilarlo bajo Windows (sí, sólo utilizo Windows y me gusta, no voy a cambiar a otra cosa pues no tengo necesidad de ello) para otras plataformas que no sean PlayStation 2, por cierto en un futuro tendré que probar a compilar Bennu para GP2X F100/F200 con las SDL aceleradas, ahora que conozco la estructura de directorios gracias a PS2 y el instalador que me pasaron ColDev.



SplinterGU

a ver...

1) meter ese delay en el interpreter no es la mejor opcion... deberias hacer un callback que se ejecute cuando se hace el frame final... asi como hacen todos los modulos (teclado, video, etc)... estas quitando velocidad de proceso a favor del sonido.

2) lo del blitter necesito hacer rotaciones/escalado bien... ya tengo bien los vertices del box rotado (cosas que no estaba asi) y pero el dibujado de la textura me sale desplazado 1 px, segun este rotado/escalado...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

masteries

#24
Quote from: SplinterGU on January 20, 2013, 08:42:26 PM
a ver...

1) meter ese delay en el interpreter no es la mejor opcion... deberias hacer un callback que se ejecute cuando se hace el frame final... asi como hacen todos los modulos (teclado, video, etc)... estas quitando velocidad de proceso a favor del sonido.


¿Cuándo se hace el frame final? Recuerda que como autor de Bennu te lo conoces muy bien, el resto de mortales no. ¿Callback...? De esas cosas no han estado nunca disponibles allí de los temas de control en Tiempo Real de dónde vengo (no programo para PC). De todas formas si supiera cómo poner una prioridad al audio mayor al resto de las cosas, se solucionaría.

Adjunto la versión BennuGD beta 1 para PlayStation 2 con soporte para audio, y el .dcb de la versión Masteries Runners del concurso con adaptaciones específicas para PS2

El resto de archivos necesarios para ejecutar Masteries Runners los tenéis aquí:

https://code.google.com/p/bennugdplay2/downloads/list

l1nk3rn3l

GRACIAS .. QUE APORTAZOOOO.. HABRAN JUEGOS PORTADOS A LA PS2...

vamos a probar algunos juegos haber como van..


gracias de nuevo..

descargando

SplinterGU

#26
Quote from: masteries on January 20, 2013, 11:38:57 PM
Quote from: SplinterGU on January 20, 2013, 08:42:26 PM
a ver...

1) meter ese delay en el interpreter no es la mejor opcion... deberias hacer un callback que se ejecute cuando se hace el frame final... asi como hacen todos los modulos (teclado, video, etc)... estas quitando velocidad de proceso a favor del sonido.


¿Cuándo se hace el frame final? Recuerda que como autor de Bennu te lo conoces muy bien, el resto de mortales no. ¿Callback...? De esas cosas no han estado nunca disponibles allí de los temas de control en Tiempo Real de dónde vengo (no programo para PC). De todas formas si supiera cómo poner una prioridad al audio mayor al resto de las cosas, se solucionaría.

Adjunto la versión BennuGD beta 1 para PlayStation 2 con soporte para audio, y el .dcb de la versión Masteries Runners del concurso con adaptaciones específicas para PS2

El resto de archivos necesarios para ejecutar Masteries Runners los tenéis aquí:

https://code.google.com/p/bennugdplay2/downloads/list


bueno, realmente los callbacks no tiene nada que ver con tiempo real... en pc tambien puedes tener tiempo real... de hecho yo trabaje mucho con tiempo real con sistema operativo QNX cuando las maquinas mas poderosas eran las 386... en fin, no mistifiquemos el tiempo real... por suerte, esto no tiene nada que ver con ello...

un callback es una llamada que realizas desde otra funcion o proceso, en determinados momentos o eventos, estos callbacks se usan mas que nada para dar un tratamiento especial o particular del evento o datos, o lo que sea.

el callback en cuestion se llama handler_hooks, tienes ejemplos de como usarlo en los siguientes modulos/funciones

libmouse.c, do_mouse_events
libkey.c, process_key_events
librender.c, gr_wait_frame
                    gr_draw_frame

tambien tienes en otros modulos...

cuando todos los procesos ejecutaron su frame, el core de bennugd ejecuta cada una de las llamadas a estos callbacks, y entonces ahi es como logramos, recoger las teclas, recoger lectura de mouse, dibujar en pantalla y otras cosas mas.

si tienes alguna duda, pregunta...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

masteries


Ok, entendido.

Aún así el audio en PS2 es un hilo ejecutado en paralelo al programa principal, y como no existe la ejecución en paralelo, hay que darle tiempo de alguna manera.
Creo que lo del callback estaría bien para hacer la llamada a la función del audio y que se ejecutara, pero ya está ejecutándose; tal vez se la puede despertar/invocar de alguna manera, pero de momento lo desconozco.

El hilo principal puede llegar a saturar la capacidad computacional, que es lo que sucede cuando no hay sonido, que el hilo principal se come todo el tiempo/recursos disponibles. Por eso dándole mayor prioridad al audio ejecutará sus cosas con el tiempo mínimo que necesite, se perderá algún cuadro por el camino (lo normal con sonido, lo mismo pasa en GP2X, en WIZ... al utilizar el sonido pierdes algo de rendimiento gráfico).

Ahora mismo, lo de darle un tiempo prefijado al audio no es lo mejor, pues te puedes quedar corto, o puede que realmente a veces regales tiempo a la nada.

Echaré un vistazo en busca de "handler_hooks".

Todo lo que me haces mediante callbacks lo suelo hacer con DMA (transferencias directas a memoria) para encontrarme los datos debidos a eventos ya actualizados y no consumir ciclos de cpu, pero es un paradigma diferente.

Tengo un blitter de rotación, pero no creo que te sirva, está implementado mediante una transferencia DMA, y lo único que hace para rotar un gráfico es ir colocando los píxeles de las líneas horizontales de un gráfico de manera no horizontal en la pantalla (bueno, el buffer que luego se convertirá a una señal de vídeo analógica),  va saltando píxeles (de la línea horizontal del gráfico original) y colocándolos en diferentes posiciones verticales de la pantalla dependiendo del ángulo deseado. El efecto no es muy bueno, pero rota con decencia, y sin consumir más tiempo que el blitter normal.


SplinterGU

callbacks y dma no es lo mismo... y una cosa no impide la otra... igual no me sirve eso, esto tiene que ser para todos los SO.

como sea, quizas el algoritmo me sirva... pasamelo y lo veo...

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

masteries

#29
Si, ya sé que no son lo mismo.

El código del blitter está basado en lo que ves en ese vídeo de youtube, pero aviso que es un código muy específico para la aqrquitectura en cuestión; yo estoy haciendo algunos cambios para adaptarlo a hacer todo mediante DMA, en esta arquitectura el DMA es programable y se le pueden pasar unas pocas instrucciones pensadas para él y hacer que haga algo más que transferir datos entre periféricos, de ahí la transformación de la rotación.

Pero tal vez el código entero del blitter te dé ideas, ya que dibuja muchos sprites y muy deprisa sin un adaptador gráfico que apoye el 2D, es todo por CPU. El enlace al código viene en la descripción. Yo utilizo el compilador "bueno", da mejor rendimiento.

http://www.youtube.com/watch?v=IRT4ShYi8Bw

Toma y aquí tienes la versión más "heavy", con rotación, con escalado (llega a escalar cientos de sprites sin problemas) y con cosas en 3D, para la misma arquitectura:

http://www.youtube.com/watch?v=KsToQmFndpg

Descargar código fuente de aquí:

http://pouet.net/prod.php?which=59095