Toqueteando las tripas del OCS en ASM. Nivel -1

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 22 Abr 2019 19:03

Último mensaje de la página anterior:

kikems escribió:Mlake, que sepas que con Chema estas creando un monstruo. Con el exitazo que ha tenido anoche la DemoScene, a ver si gracias a tu esfuerzo de tutorial, más gente se va animando y tenemos nuevos coder para la siguiente generación de amigueros.

Esa es mi intencion, que muchos le quiten el polvo al A500. Desde que existe WHDload, los tienen muertos de risa y tiran de AGA o UAE. :(

Anoche se demostró que aun no estan muertos. -thumbup

Si este hilo ayuda a que la gente saque cosas (intros, juegos, slideshows....) para A500, me quedo mas que satisfecho. -drinks

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1911 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Chema » 22 Abr 2019 19:48

A ver... de momento es más o menos sencillo y sólo estoy curioseando un poco. De ahí a programar algo hay un mundo. Copiar y adaptar el tutorial de Mlake es fácil. Porque él lo hace fácil.

Tengo la sensación se que mi scroll salta varios píxeles de vez en cuando, pero no sé si es cosa del UAE o de mi percepción.

También estoy aprendiendo cosas básicas como convertir imágenes con un programa que se llama KingCon. He conseguido convertir en modo entrelazado y generar la paleta para el copper, pero aún no sé cómo decirle que use una paleta en concreto, para poder tener la misma en fondo y bobs, por ejemplo.

Y me queda refinar mi asm del 68k, que es aún muy primitivo.

jjsaenz1969
Mensajes: 514
Registrado: 21 Oct 2016 15:45
Agradecido : 146 veces
Agradecimiento recibido: 152 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor jjsaenz1969 » 22 Abr 2019 22:00

Muy bueno este curso, espero que dure mucho tiempo.
El formato digital está muy bien para una lectura rápida pero yo soy de los que para estudiar algo necesito el papel.
Así poder subrayar y anotar cosas que creo importantes.

Para mi uso empecé a pasar los capítulos del curso, con la ayuda del Libre Office a un formato imprimible y he pensado en compartirlo aquí. Quizá lo quiera imprimir alguien más.
Lógicamente el documento no está acabado y según salgan nuevos capítulos los iré añadiendo. Mi intención no es cambiar nada, simplemente es un corta y pega del original.

y aquí está el enlace.

Avatar de Usuario
minter
Mensajes: 2577
Registrado: 22 Jul 2014 18:51
Agradecido : 2469 veces
Agradecimiento recibido: 1078 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor minter » 23 Abr 2019 00:17

Las colaboraciones suelen acabar en ese panfleto llamado Retrowiki Magazine. -507

Y todo esto, al final, si se imprime, se pude lamer. y sabe a viejuno. :D

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1911 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Chema » 23 Abr 2019 00:40

Vale, ya pillé el tema del raster para medir el tiempo ¡Gracias Mlake!

Por lo visto tengo que aprender a optimizar... Muevo 10 bobs de 32x56 pixels con un solo plano y ya voy apurado, por lo visto... Es verdad que no estoy haciendo nada potente, cada bob borra y recupera su fondo, los tamaños ni las posiciones ni nada es hardcoded, y cosas así, pero a ver dónde le puedo meter mano. ¿Alguna idea de por dónde empezar? El que realice el trabajo un custom acaba con todos los sitios típicos donde suelo mirar :)

tiempo.png
tiempo.png (24.26 KiB) Visto 1021 veces


Mi bucle principal es (por si acaso hago algo mal)

Código: Seleccionar todo

   jsr paint_all_sprites
.outloop
   bsr waitVB
   move.w #$0f00,COLOR00+CUSTOM
   jsr remove_all_sprites
   jsr move_all_sprites   
   jsr paint_all_sprites   
   move.w #$0000,COLOR00+CUSTOM
   bra .outloop

mcgeezer
Mensajes: 8
Registrado: 07 Mar 2019 07:51
Agradecimiento recibido: 15 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mcgeezer » 23 Abr 2019 13:27

I have to say this course is very good, even though I'm having to translate from Spanish to English to understand.

-thumbup

My only advice would be to start to make use of VASM and something like Notepad++, I used to use Devpac which is similar to ASMone and I never looked back once I used VASM, everything becomes so much easier to manage you will code faster and cleaner.

I would also advise doing a little on using Macros, they will help massively as your projects become larger.

Generally, your coding can operate much faster at the expense of using more memory, in my programming I try to pre-calculate as much as possible and I try to blit as much as possible in one go.

It's great that people are teaching and learning Amiga stuff as well - please keep it up.

Graeme

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 24 Abr 2019 00:28

Chema escribió:A ver... de momento es más o menos sencillo y sólo estoy curioseando un poco. De ahí a programar algo hay un mundo. Copiar y adaptar el tutorial de Mlake es fácil. Porque él lo hace fácil.

Tengo la sensación se que mi scroll salta varios píxeles de vez en cuando, pero no sé si es cosa del UAE o de mi percepción.

También estoy aprendiendo cosas básicas como convertir imágenes con un programa que se llama KingCon. He conseguido convertir en modo entrelazado y generar la paleta para el copper, pero aún no sé cómo decirle que use una paleta en concreto, para poder tener la misma en fondo y bobs, por ejemplo.

Y me queda refinar mi asm del 68k, que es aún muy primitivo.


Sobre el Scroll, sin un CRT no va realmente fino.

Lo que si puede pasar es que haya algun calculo o movimiento que no este bien y haya un "petardazo" repetitivo.

Tiene que quedar claro como se mueve el scroll.
Cuando la ventana corre hacia la derecha del bitmap, la secuencia es la siguiente:

Puntero - Scroll 00 (punto de partida)
Puntero+2 - Scroll FF
Puntero+2- Scroll EE
Puntero+2 - Scroll DD
Puntero+2 - Scroll CC
.....
Puntero+2 - Scroll 33
Puntero+2 - Scroll 22
Puntero+2 - Scroll 11
Puntero+2 - Scroll 00
Puntero+4 - Scroll FF
Puntero+4 - Scroll EE
Puntero+4 - Scroll DD
......... Y asi.

El incremento del puntero se hace cuando el scroll llega a FF.

Si el scroll busca el lado izquierdo del bitmap, la secuencia es la siguiente:

Puntero - Scroll 00 (punto de partida)
Puntero - Scroll 11
Puntero - Scroll 22
Puntero - Scroll 33
Puntero - Scroll 44
.....
Puntero - Scroll DD
Puntero - Scroll EE
Puntero - Scroll FF
Puntero-2 - Scroll 00
Puntero-2 - Scroll 11
Puntero-2 - Scroll 22
Puntero-2 - Scroll 33
......... Y asi.

En este caso, el puntero lo movemos al llegar a scroll 00.

Como siempre, el scroll hay que ponerlo por duplicado 00---FF.
Si sumas/restas $11, vigila que no lleges a cosas como $10,$ef...

Sobre el color de los bobs. Ellos no tienen color independiente como los sprites.
Tienen que tener la misma paleta que el bitmap/playfield. Al fin y al cabo no dejan de ser "recortes" del mismo.
Si el playfield tiene 3 bitplanes (8colores), esa es la paleta de escenario y bobs.

Chema escribió:Vale, ya pillé el tema del raster para medir el tiempo ¡Gracias Mlake!

Por lo visto tengo que aprender a optimizar... Muevo 10 bobs de 32x56 pixels con un solo plano y ya voy apurado, por lo visto... Es verdad que no estoy haciendo nada potente, cada bob borra y recupera su fondo, los tamaños ni las posiciones ni nada es hardcoded, y cosas así, pero a ver dónde le puedo meter mano. ¿Alguna idea de por dónde empezar? El que realice el trabajo un custom acaba con todos los sitios típicos donde suelo mirar :)

tiempo.png

Mi bucle principal es (por si acaso hago algo mal)

Código: Seleccionar todo

   jsr paint_all_sprites
.outloop
   bsr waitVB
   move.w #$0f00,COLOR00+CUSTOM
   jsr remove_all_sprites
   jsr move_all_sprites   
   jsr paint_all_sprites   
   move.w #$0000,COLOR00+CUSTOM
   bra .outloop


No te obsesiones con el raster, estamos empezando y podemos caer en paranoias. -rofl
El blitter es bastante tragon. A veces la idea es mas saber donde repartir el trabajo, que la cantidad de bobs en si.
Imagen

En el caso de tu captura, puedes poner mas cambios de color entre las distintas rutinas (borra sprites, mueve sprites, pinta sprites), o incluso entre blit y blit.... con colores que te llamen la atencion. Asi ves lo que pasa interiormente.
Quiza puedes ver donde se te va el tiempo.

Tambien puedes empezar a trabajar antes si ves que no vas a dibujar mas en esa zona. (flecha roja)

Intenta preparar los bobs que primero van a aparecer en pantalla y despues los ultimos. La cosa es pensar que el lugar por donde ya ha pasado el rayo, se puede pisar.
A veces, en lugar de borrar todos, podrias borrar/pintar independientemente.

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 24 Abr 2019 02:27

mcgeezer escribió:I have to say this course is very good, even though I'm having to translate from Spanish to English to understand.

-thumbup

My only advice would be to start to make use of VASM and something like Notepad++, I used to use Devpac which is similar to ASMone and I never looked back once I used VASM, everything becomes so much easier to manage you will code faster and cleaner.

I would also advise doing a little on using Macros, they will help massively as your projects become larger.

Generally, your coding can operate much faster at the expense of using more memory, in my programming I try to pre-calculate as much as possible and I try to blit as much as possible in one go.

It's great that people are teaching and learning Amiga stuff as well - please keep it up.

Graeme

Thanks a lot. -drinks

I often use vasm+notepad, but courses codes are small enough to be fitted in a small IDE on a real A500.
It´s just a excuse to turn the real amiga on. :oops:

I hope lot of people join us in ths "adventure". -507

Best regards.

masteries
Mensajes: 268
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 21 veces
Agradecimiento recibido: 81 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor masteries » 24 Abr 2019 09:15

¡Como mola este hilo!

Por fin me estoy enterando de qué es el Copper, el famosísimo Copper, sus capacidades y posibilidades,
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1911 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Chema » 24 Abr 2019 10:07

Gracias Mlake. De hecho añadir colores me sirvió para ver que el tiempo estaba dominado por los blit :) Lo otro que comentas creo que se llama "perseguir" o "correr detrás de" el rayo (era algo como "race the beam" o "chase the beam"). En cuanto pasa del área donde vas a dibujar, ¡zas! te pones a ello corriendo. Incluso, si ordenas tus bobs por coordenada Y, puedes ir dibujando según el raster haya pasado la zona que vas a pisar. Pero para eso hay que hilar muy fino.

Al final, en una conversación por Telegram con Birra y con Fernando Cabrera (mil gracias: sois lo más), me comentaron algunas ideas que me han ayudado un montón.

Una que ya tenía yo en mente de algún modo, es usar una copia del fondo limpia para restaurarlo desde ahí al borrar y así no tener que guardar la zona que va a corromper el bob al pintarse. Eso reduce más o menos 1/3 el tiempo total.

La otra es usar otro buffer más sobre el que dibujas (vamos el doble-buffer de toda la vida, que también se usa en máquinas de 8-bit, con ciertas limitaciones) de manera que puedes usar todo el tiempo de frame.

Este es el camino más claro, pero como ahora lo que me interesa es aprender y manejarme con las rutinas sin hacer nada estúpido, pues no lo he implementado aún. No mejora el tiempo total del pintado, sino que te da más tiempo para el mismo.

Por cierto, me tengo que refrenar un poco. No quisiera enguarrar tu hilo con estas disquisiciones que, además, van sobre el blitter, cuando no lo has tocado aún.

¡Sigue así!

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 25 Abr 2019 15:16

Chema escribió:[...]

Por cierto, me tengo que refrenar un poco. No quisiera enguarrar tu hilo con estas disquisiciones que, además, van sobre el blitter, cuando no lo has tocado aún.

¡Sigue así!

Para nada... Me gusta el feedback y saber que las cosas van saliendo bien.

A ver si esta noche puedo montar un scroll controlado por el joystick en single y dual playfield.

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 26 Abr 2019 04:12

CAP 3D Scroll e introduccion al dual playfield

En la entrega anterior vimos como funcionaba el desplazamiento de 16pixels (0-F) para producir el scroll horizontal. Teniamos un word "escondido" y podiamos asomarlo X pixels usando BPLCON1 ($xx00,$xxFF)
En el ejemplo podiamos ver como solo moviendo BPLCON1 produciamos sensacion de movimiento (si usabamos el bitmap adecuado). Ahora toca moverlo de verdad.....

La idea es la siguiente, asomar o esconder el bitmap X pixels y mover el (los) puntero de la imagen de forma que mantengan el compas y puedas desplazar la imagen con suavidad.
Supongamos que corremos el bitmap hacia la Izquierda, como en Super Mario Bros.

Estamos apuntando al principio del bitmap y nuestro scroll esta a 0. Vamos a avanzar el primer pixel
Ese pixel corresponderia al siguiente word (aumentamos 2 bytes el puntero), pero con scroll F.

Asi empezariamos a disminuir BPLCON1(scroll) hasta 0 (el bitmap va metiendo hacia el lado izdo)

Al terminar aumentamos otro word el puntero, y ponemos el scroll en F.
Volvemos a disminuir (para que se escondan esos 16 pixels) y asi sucesivamente.


Si el movimiento lo hacemos al reves, la jugada cambia.
Empezamos con los punteros en la posicion derecha de la imagen y vamos incrementando el scroll en lugar de disminuir.

Puntero y scroll 0

Empezamos a subir el scroll hasta F y hacemos el cambio de puntero al llegar otra vez 0. No como antes que lo haciamos en F.
En este caso restamos un word al puntero porque estamos mirando el lado derecho de la imagen y queremos ir al inicio.

Recuerdalo, si vas p'alante el puntero se mueve junto al scroll en F. Cuando vayas para atras, cambia el puntero y sal con el scroll en 0.


Empezamos con la copperlist y asi hacemos repaso de todo.

Imagen


$1fc se llama FMODE y debemos pònerla a 0 para no tener problemas con AGA. Para el OCS no es nada.

Apagamos los bitplanes (BPLCON0)

Montamos playfield basico 320x256 configurando DIW y DDF.

El modulo lo explicamos en posts anteriores. En nuestro caso, los DDF solo dan 40 bytes, por lo que tendremos que saltar los otros 40, mas los 80 del bitplane que tiene entrelazado. por eso ponemos 120.

Hasta ahora todo controlado, llegamos a scroll (ahi pokeamos el $0000-$00FF que nos interese)

Despues vienen los punteros, ya lo hemos hecho otras veces.

Le damos color.

Encendemos los bitplanes con compatibilidad A1000 (+$200 bit 9)

Copper terminado.



El programa basicamente mueve y pinta (pokea la copperlist).
Lo unico que hacemos es esto. Se puede hacer mejor pero quiero que se entiendan los pasos. Cuando hay que cambiar de puntero, si en 0 o en F....

Imagen
image upload

Es una chapuza incrementar usando $11 pero quiero recalcar que hay que subir/bajar los 2 nibble a la vez. Esto es SINGLE playfield.

D7 mueve nuestro scroll y D6 le dice los words que hay que sumar/restar al puntero de la imagen. Les he puesto un tope chustero para que no pueda irse a la porra (40bytes es lo maximo que puedes avanzar y tampoco deja bajar del puntero original.

Imagen
Imagen

El pokeo es igual que la tipica rutina que usamos para preparar los punteros de los distintos bitplanes dentro de un bitmap entrelazado.
Usamos el primero como referencia y le vamos sumando el ancho de los demas.
Aqui le he puesto AnchoBPLb , ancho bitplanes en bytes.
La diferencia entre ambas rutinas es que le añadimos d6 para ir modificando el puntero segun nos pida el scroll que hemos metido con d7 (lo filtramos AND $FF por si hubiera algo raro)..

Lo pongo asi para que se vea que es casi la misma rutina que usabamos para montar un bitmap entrelazado.

Dual playfield.

Si habeis llegado hasta aqui, lo demas va rodado. La unica pega es que tenemos que cambiar un poco el chip....

Hasta ahora usabamos el scroll por parejas, los modulos eran iguales.... en dual playfield cada uno tiene su funcion.
En este modo ya no usamos los bitplanes como queremos, hay que reordenar la mente.

Los playfields se dividen entre planos pares e impares.
1/3/5 para playfield 1 (PF1) y 2/4/6 para PF2.

No solo eso, ademas la paleta se nos parte en dos. Del 0 al 7 para PF1 y del 8 al 15 para PF2 (eso hace que perdamos el color 8 porque se convierte en transparente como el 0).
Ganamos el plano extra, pero nos cruje en el tema de color.

Los modulos mas de lo mismo, para un plano y para el otro.

El Scroll seria $0021 (alto el PF2 y bajo el PF1).
Esto ultimo nos facilita la tarea de hoy al trabajar con nibbles sueltos...

Imagen
free image upload

Lo mismo de antes, ojo al modificar el puntero, si es en scroll 0 o en scroll F.
Teniendo todas esta cosas en mente, adaptarse al dual playfield es sencillo.

Imagen
picture upload

Para "encender" el modo dual tenemos el bit 10 de BPLCON0, junto al colorburst del A1000.
Si el bit 9 era el 2 en $200, le sumamos el bit 10 (4 o $400 para nosotros) dando el $600
Nuestro ejemplo usa 4 planos (2 por cada PF), seria $4600 .

Imagen

Mas abajo teneis las fuentes ya que muchos tirais de SDK.

Le daremos otro repaso mas adelante, simplemente es importante quedarse con las limitaciones/cambios dual playfield. Sobre todo el tema color, reparto de bitplanes... Ademas tenemos que arreglar la zona donde estamos haciendo el scroll porque se nos ve todo el chiringuito.

Sobre el tema del joy, la verdad es que es un rollo el tema de I/O en el amiga (o a mi me lo parece). Leer el puerto es bastante lioso (no es una nes con un byte para los 8 botones).

Aun asi, sacar la izda y la dcha no es complicado.

Hay que leer a JOYxDAT
http://amiga-dev.wikidot.com/hardware:joy0dat

JOY0DAT suele ser el raton y JOY1DAT el mando.
El bit 1 nos da derecha y el 9 la izquierda, el problema es que nos lo da de forma invertida. 0 es encendido y 1 es apagado.
Los testeamos como al raton teniendo en cuenta el inconveniente y movemos el display.

Abajo esta todo, cualquier cosa por aqui estamos. Que es un poco tarde.

FUENTES: https://gofile.io/?c=E4X7jZ

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1911 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Chema » 26 Abr 2019 15:48

Ya tengo deberes para el finde :)

Avatar de Usuario
SrHead
Mensajes: 52
Registrado: 10 Nov 2016 16:19
Agradecido : 44 veces
Agradecimiento recibido: 13 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor SrHead » 27 Abr 2019 12:28

Hostia acabo de ver este hilo -shock . Era super necesario un tutorial como este en el Amiga. Mil gracias por el esfuerzo.

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 28 Abr 2019 20:20

Domingos Ociosos.

Si ya le habeis pillado el rollo a los playfields, solo queda hacer experimentos.

Imagen

Rapidito y sin tochos....

Imagen

FUENTE: https://ufile.io/68rydznv

Avatar de Usuario
Chema
Mensajes: 2263
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1911 veces
Agradecimiento recibido: 604 veces
Contactar:

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Chema » 28 Abr 2019 20:36

Me has dejado atrás!!! :) Este finde no he podido hacer nada y ni he comenzado con los playfields… Prometo ponerme al día en cuanto tenga un hueco...

De todas formas, ¿no es posible que subas tus fuentes en un zip aquí a retrowiki como adjunto? No es que sea necesario, pero es una idea, para que quede todo junto...

Avatar de Usuario
Mlake
Mensajes: 75
Registrado: 27 Mar 2019 19:54
Agradecido : 34 veces
Agradecimiento recibido: 165 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 28 Abr 2019 21:35

Chema escribió:Me has dejado atrás!!! :) Este finde no he podido hacer nada y ni he comenzado con los playfields… Prometo ponerme al día en cuanto tenga un hueco...

De todas formas, ¿no es posible que subas tus fuentes en un zip aquí a retrowiki como adjunto? No es que sea necesario, pero es una idea, para que quede todo junto...

No hay que alarmarse. -grin

No es nada que no hayamos tocado, esperas de copper, cambios de color y scroll (00-FF), DDF, punteros...

Simplemente es para dar ideas y salir de la tipica pantalla 320x256.
Con esto ya hay para echar un buen rato delante del teclado y empezar a entender articulos mas elaborados que hay disponibles por las redes.

Mas adelante miraré una forma mas amena de seguir con el hilo.

Las fuentes son una chusta llena de copia/pegas y cambios para hacer el codigo mas legible. Simplemente sirven para entender como "meterle mano" al hard.
Se pueden hacer mucho mejor (los cracks del ASM en M68K te aconsejaran) a cambio de ser menos entendible para el profano.


Volver a “Software & OS Amiga”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados