Scripts Z-80 en The Hobbit

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 05 Dic 2014 17:30

Último mensaje de la página anterior:

@Luis,

que sea leve muchacho -507
Esto de aquí, comparado con lo que habíamos estado haciendo es un super infierno -banghead
Yo puedo decirte que estoy descubriendo formas de programar que nunca antes había visto, está claro que estos estilos en el mundo empresarial serían motivo de despido inmediato!
Pero es muy interesante conocerlos porqué los podrías aplicar a otros juegos del estilo del Hobbit en máquinas con memoria escasa (como nuestros CoCo 2 y Dragón 32)

saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2337
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 46 veces
Contactar:

Re: Scripts Z80 - Conversión a 6809

Mensajepor luiscoco » 05 Dic 2014 21:50

Te aseguro que hay mejores maneras, he visto muchos trozos prácticamente iguales y al menor error ese stack y su forma de usarlo es peligrosisimo, yo no se como llevaban la cuenta de cuantas PUSH y POP llevaban porque mira que empezar casi todas las rutinas a la mitad o salir a la mitad, ademas creo que hacen demasiados PUSH y POP, si la verdad en los registros nunca casi hay nada necesario para preservar durante el recorrido de la rutina y recuperar lo al final, generalmente solo son los parámetros, no creo que lleven valores que aya que proteger durante el recorrido de todas estas funciones.

Quiero estar cerca de la creación del codigo para 6809, para empaparme bien, y aportar ideas, mejoras y eficiencias.

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 05 Dic 2014 22:20

La verdad es que parece que si están utilizando los índices IX ,IY incluso HL a veces, a largo recorrido, se les asigna un valor en una rutina y se usan (sin haberlos cambiado) tres niveles de llamada a subrutina mas tarde, cosa que molesta porqué es difícil averiguar donde se cargó con un valor uno de esos índices que son usados en una rutina que puede ser llamada desde mas de un sitio y no te cuento cuando has de saber a que tipo de estructura de datos apunta uno de ellos.
Pero ésto, al lado de los scripts de los personajes, es una pequeñez. Qué pasada, cuan enrevesado lo llegaron a hacer xD
Y por supuesto que debe ser lo mas adecuado para este tipo de programas.
Y bueno, cuando pasemos a 6809 me temo que iremos convirtiendo las rutinas tal cual, adaptándolas a las facilidades que permite con los direccionamientos indexados de x,y,u pero respetando las mismas locuras que tiene el original. Tengo la impresión de que habrá muy pocas zonas que podrán crearse en base a una descripción funcional de la rutina obviando la forma en que se ha implementado para Z-80.

Todo llegará, al paso que vamos no tardaremos mucho en tener prácticamente todo casi entendido (con reparos)
Pero, sinceramente, prefiero pasar dos meses mas sufriendo, analizando lo que hace ésto y tratando de entender cómo lo parieron que tener prisa por empezar a codificar ... que es lo que realmente nos gusta.
Cuanto mas claro lo tengamos, menos probabilidades habrá de hacer algún disparate.

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 05 Dic 2014 22:32

hola,

creo que ya no dan mis neuronas para mas avances con esta maraña de subrutinas ligadas a $7F1A, así que subo de nuevo aquí el fichero grande, para que le echéis una ojeada a conciencia y nos comentéis las diferencias de interpretación que encontréis -nb -nb
Además adjunto el documento que contiene el árbol de llamadas a partir de la susodicha $7F1A

Para encontrar los párrafos revisados, además de buscar por sus direcciones $nnnn podéis buscar también por ### y os irán saliendo todas secuencialmente.

@Chema
tengo todavía DOS notas comentadas tuyas por leer, digerir y pasar al fichero grande.
Trataré de hacer las dos primeras fases, pero me gustaría no hacer la tercera hasta que hayamos aceptado / consrensuado el follón de la $7F1A y además le hayamos puesto algún nombre mejor que "NoNamexx" a las, creo que once, que han quedado sin bautizar, pobrecitas!

Es cierto que se ve algo de luz muy al fondo del túnel, pero jopé, qué lejos queda todavía!!

saludos
pere
Adjuntos
7F10 y relacionados.zip
áarbol llamadas
(1.24 KiB) Descargado 83 veces
HOBASM_V9_08j - socorro $9EA0.asm.zip
Fichero fuente
(178.65 KiB) Descargado 78 veces

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 06 Dic 2014 11:32

Buenos días,

tras mirar por encima el post de Chema del día 4 me dí cuenta de que en su seguimiento de los Scripts aparecía una llamada a $7F1A
Esta es precisamente mi cruz ... así que traslado su tratamiento a este otro hilo que parece mas adecuado.

Adjunto para facilitaros el trabajo las partes de código afectadas, en un solo documento.
Al principio está la infame $7F1A y tras ella las rutinas utilizadas.
Al final de documento veréis unas pocas variables / estructuras que he nombrado como he podido ...
Venga, a ver si entre todos aclaramos definitivamente esta intrincada parte de los scripts.
Cualquier idea puede ser vital -nb -please

Buen finde

saludos
pere
Adjuntos
Relacionados con $7F1A.zip
Pseudo encuesta ...
(11.1 KiB) Descargado 86 veces

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 06 Dic 2014 11:45

como veo que el hilo de tratamiento de acciones no va a ser utilizado puesto que todas las acciones
prácticamente se lanzan desde los scripts y este hilo si tiene chicha, he movido los mensajes del otro hacia éste.

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 06 Dic 2014 19:26

hola Chema,

estoy con tu documento del día 3 mirando la zona de despacho de comandos de scripts y se me hace raro ver que haya código preparado para recibir un $0C cuando en ningún directorio de ningún personaje hay una sola referencia a este comando $0C
A ver si también nos modifican estas cosas al vuelo (?)

sigo con ello, se pone interesante el tema de los scripts ...

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1855
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 930 veces
Agradecimiento recibido: 326 veces
Contactar:

Re: Scripts Z80 - Conversión a 6809

Mensajepor Chema » 06 Dic 2014 21:52

Tampoco a un comando 0 ni, creo recordar, $f. El 0 se pone sobre la marcha. Vete tú a saber el resto...

De todos modos no descartemos encontrar bugs o parches que medio funcionan o mezclas de código de versiones antiguas...

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 07 Dic 2014 12:57

@Chema
encontré un comando $0F en Gandalf_E05 ($C8E0), solamente éste, ninguno más!

Para mí el código que empieza en $9899 trata los comandos 0-1-2-3-4
En $9931 tratamos el comando 2, pero ahí se podría colar el comando 0 si existiera ... y tuviera tres parámetros además, claro.
Como tu dices, no tiene sentido que se procese en el bloque de >=5 porqué no llegará nunca allí!

En $996E se deshabilita un comando pasándolo a cero, pero si luego se puede procesar por el agujero que hemos visto ... ¿qué pinta el 0?

En $98BF se controla que si el comando es >4 no se haga nada y pase al siguiente personaje, pero es que está en la parte
donde se procesan los comando 0-1-2-3-4 o sea que los mayores de 4 están excluidos ... (?)
Tiene pinta de maravilloso bug, ya lo trazaré con breakpoints condicionales cuando lo tengamos para 6809, no creo que llegue nuca a esta parte de código, pero ...

Efectivamente, parece que no hay comandos 1 en los directorios, pero tampoco he visto tratamiento específico para el 7 ...
Parece que si no es uno de: $E, $F, $C, $0 y es mayor de 4 (sic) se limita a resetear a la entrada inicial del directorio, ¿no?

La parte Script_SetNextInstuction $9918 la veo muy rara.
Recibe en DE los bytes a saltar (4 si viene de $9928 ó 2 si viene de $9974) y encima en función de que el bit 4 del comando esté o no a 1 le puede incrementar en 2 mas!!
Ambas cifras se me antojan raras como poco. La estructuras de datos que contienen punteros a rutinas son de tres bytes.
No veo claro el objetivo de estas sumas: HL +=2 ni de HL +=4 ni tampoco el de HL +=6 (las tres posibilidades)
Si te soy sincero no veo que valor contiene HL al llegar a esta rutina ... ¿a qué apunta?

Que conste que ésto no es ningún examen, aunque lo parezca -507

Hasta aquí he llegado y ya no sé como salir del garaje -banghead

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1855
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 930 veces
Agradecimiento recibido: 326 veces
Contactar:

Re: Scripts Z80 - Conversión a 6809

Mensajepor Chema » 07 Dic 2014 13:52

Lo del tratamiento del 0 me parece un bug como una catedral, pero ha que mirarlo con más cuidado. Lo de los incrementos de HL creo que tenia sentido pero no recuerdo ahora cómo era. Lo miraré de nuevo a ver...

Siento los typos estoy con el móvil

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 07 Dic 2014 14:18

gracias Chema,

no te preocupes, no tenemos ninguna prisa ...

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 08 Dic 2014 20:04

Creo que por fin lo he entendido, eso espero al menos.
$9918 alias SetNextInstruction se puede llamar desde dos sitios únicamente:
desde $9928 alias DoActionFullCall
o desde $9974 alias DoAction
Estos dos son llamados desde $987C segun se esté procesando un comando 4 ($9974) o uno < 4 ($9928)
Antes de efectuar estas llamadas HL se ha cargado con el contenido de los bytes 2 y 3 del directorio de alto nivel, o sea que apunta al primer script del personaje
o al script que se acaba de ejecutar.
$9974 pone DE=2 ya que procesa comandos tipo 4 que solamente tienen 2 bytes de longitud (suelen ser de movimiento)
Por contra a $9928 se llega con DE=4 ya que los comandos
- 1 no está implementado
- 2 ocupa 4 bytes
- 3 también ... ahora se entiende el byte añadido raro $00 tras la dirección de la rutina
Además si el comando tiene el bit 4 a 1, se saltan dos bytes adicionales (los de la dirección de salto)

En fin, espero no haberme liado demasiado, creo que con ésto ya si me cuadran las rutinas de los scripts.

@Chema
¿Espero a que me digas algo sobre los párrafos que incluí en este hilo correspondientes a la $7F1A y sus allegados?
O ¿empiezo a pasar tus anotaciones de los días 3 y 4 al fichero de trabajo ya mismo?
ya me dices alguna cosa ...

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1855
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 930 veces
Agradecimiento recibido: 326 veces
Contactar:

Re: Scripts Z80 - Conversión a 6809

Mensajepor Chema » 08 Dic 2014 20:58

Me has pillado :) he tenido un finde movidito y no he mirado nada más. Yo creo que las notas de los días 3 y 4 que mencionas están casi completas del todo. Me falta analizar la rutina grande y fusionar esta de los scripts con lo que hayas averiguado del buffer donde se guardan comandos de usuario (creo que era así, pero no recuerdo). Antes de ejecutar nada de un script busca cosas que hacer en ese buffer y no sé qué hace.

Una cosa. Me da la impresión de que el código 7 resetea el script del personaje, porque es un codigo superior a 4 y no es de los válidos... ¿Me equivoco? Eso lo explicaría...

Prometo mirar lo de la 7f1A en cuanto tenga un rato...

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 08 Dic 2014 21:49

efectivamente, cualquier comando superior a 4 que no sea uno de los controlados ($0E, $0C, $0F, $00) resetea el script al inicial del directorio principal del personaje.

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z80 - Conversión a 6809

Mensajepor pser1 » 10 Dic 2014 15:03

@todos

he subido versión nueva con todas las aportaciones realizadas en este hilo.
Muchas gracias -thanks

En el hilo de consultas técnicas encontraréis algunos temas todavía pendientes que requieren ideas ... -nb

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1855
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 930 veces
Agradecimiento recibido: 326 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 13 Ene 2015 14:52

Hola de nuevo. He tenido un ratillo y he mirado algunas cosas, que podrían ser de ayuda. No lo tengo claro, porque he visto que has avanzado mucho con el tema de las acciones y la tabla de 8x25.

Si recordáis la rutina que ejecuta los scripts en 980e (que sigue sin nombre, a ver si se nos ocurre alguno) va recorriendo los personajes y ejecutando las acciones necesarias para cada uno.

En un momento dado (9870 en adelante) comprueba si el personaje en curso tiene alguna entrada en la zona de 8x25, que parece que almacena acciones que hay que realizar, probablemente para acciones encadenadas si se trata de Bilbo o para cuando decimos a los personajes que hagan cosas (SAY TO GANDALF "CARRY ME").

Si el personaje no ha realizado el número máximo de acciones (5, creo) y la que le toca ahora es un comando de SCRIPT del 0 al 4 (o sea realizar una acción o saltar a una rutina externa) entonces es donde comienza el baile. Si no, se procesa el script y se ignora si el personaje tiene entrada o no en el área de 8x25 (de momento).

Código: Seleccionar todo

      LD A, (FoundIn8x25)       ; 9899 3A F4 B6      ; recupera FoundIn8x25
      CP $01             ; 989C FE 01         ; es 1 (encontrado)?
      JR NZ, i_98BF          ; 989E 20 1F         ; no, salta a i_98BF
      BIT 6, (HL)          ; 98A0 CB 76         ; Está a 1 el bit 6 del comando a ejecutar?
      JR NZ, i_98BF          ; 98A2 20 1B         ; si, salta a i_98BF
      SUB A                ; 98A4 97            ; pone 0
      LD (FoundIn8x25), A       ; 98A5 32 F4 B6      ; en FoundIn8x25
      INC A                ; 98A8 3C            ; A=1 ID de personaje a buscar en bloque 8x25 UserTokenizedCommands
      CALL L_7F1A          ; 98A9 CD 1A 7F      ; llama rutina L_7F1A (#224# --)


Vale. La cosa es así: el bit 6 del comando (que no teníamos documentado de momento) indica si la acción tiene prioridad sobre las del área de 8x25 (hay varios comandos $4x en los scripts). Fijaos que si está a cero y el personaje tiene entrada en 8x25, entonces se intenta procesar dicha entrada a través de 7f1a. Si está a 1 se salta a 98bf para procesar el comando de script normalmente

Lo que creo que hace a continuación es, si dicho proceso se ha podido realizar, se pasa al siguiente personaje. Si no se salta a 98BF que procesa los comandos del 0 al 4 de los scripts con HL apuntando al segundo byte de la entrada en 8x25 en algunos casos (en otros al valor que tenía, es decir, a la entrada del script). Supongo que en dichas entradas se pueden tener tanto comandos normales como comandos de scripts de tipo ACCION o JUMP. Por eso se hace de este modo. Esto hay que asegurarlo, porque no me ha quedado del todo claro, pero así parece.

La rutina 7f1a ya está casi del todo descifrada y busca comando en la zona de 8x25 para el actor actual que tiene que tener una entrada (se ha chequeado antes). Intenta ejecutarla y si puede devuelve Z=0. Si no puede por alguna razón devuelve Z=1 y HL apuntando al segundo byte de la entrada para que la intente ejecutar la rutina de scripts (si se ha llamado desde ahí).

He añadido algún comentario, para aclararme yo más que nada:

Código: Seleccionar todo

L_7F1A:

   ; Salvamos registros y el valor del personaje en C
   PUSH IX          ; 7F1A DD E5      ; Guarda IX
   PUSH IY          ; 7F1C FD E5      ; Guarda IY
   PUSH BC          ; 7F1E C5      ; Guarda BC
   PUSH DE          ; 7F1F D5      ; Guarda DE
   PUSH HL          ; 7F20 E5      ; Guarda HL
   LD C, A          ; 7F21 4F      ; guarda personaje en C
   ; Obtenemos puntero al registro en 8x25, ponemos a 0 el primer byte e incrementamos
   ; el puntero
   CALL PointActorIn8x25    ; 7F22 CD FF 7E   ; llama PointActorIn8x25
   LD (HL), $00       ; 7F25 36 00      ; borra el código de personaje en el 1er byte del bloque
   INC HL          ; 7F27 23      ; apunta al segundo byte del bloque de 25
   ; Si el personaje es Bilbo
   XOR A          ; 7F28 AF      ; borra A
   CP C          ; 7F29 B9      ; era Bilbo el personaje recibido?
   JR NZ, i_7F37       ; 7F2A 20 0B      ; no, salta a i_7F37
   ;    Modificamos HL en pila por el actual (apunta al comando en el registro)
   ;    y volvemos con Z=0 (¿EXITO?)
   OR $01          ; 7F2C F6 01      ; Hace OR lógico de A con $01
   EX (SP), HL       ; 7F2E E3      ; cambia 1er parámetro del stack y lo fuerza igual a HL actual
i_7F2F: POP HL          ; 7F2F E1      ; Recupera HL del stack
   POP DE          ; 7F30 D1      ; Recupera DE
   POP BC          ; 7F31 C1      ; Recupera BC
   POP IY          ; 7F32 FD E1      ; Recupera IY
   POP IX          ; 7F34 DD E1      ; Recupera IX
   RET          ; 7F36 C9      ; Retorna
   ; Sino                  ; el personaje NO era Bilbo
i_7F37: PUSH HL          ; 7F37 E5      ; pasa puntero a 2º byte del bloque de 25 donde estaba el código de este personaje
   POP IY          ; 7F38 FD E1      ; a IY
   ; IY=HL (comando en registro), B71B=1, A=B71c; Guardamos en pila incluyendo flags (Z=0)
   LD A, $01       ; 7F3A 3E 01      ; pone valor $01
   LD (L_B71B), A       ; 7F3C 32 1B B7   ; en L_B71B
   LD A, (L_B71C)       ; 7F3F 3A 1C B7   ; recupera valor de L_B71C
   PUSH AF          ; 7F42 F5      ; lo guarda junto con los flags
   
   ; Llama a AnalizeUserCommand
   ; B71b=0, B71c=valor antiguo de B71c )¿se modifica en AnalyzeUserCommand?)
   CALL AnalyzeUserCommand    ; 7F43 CD B6 79   ; llama AnalyzeUserCommand
   EX AF, AF       ; 7F46 08      ; guarda AF en AF
   XOR A          ; 7F47 AF      ; pone valor 0
   LD (L_B71B), A       ; 7F48 32 1B B7   ; en L_B71B
   POP AF          ; 7F4B F1      ; Recupera AF
   LD (L_B71C), A       ; 7F4C 32 1C B7   ; y lo devuelve a L_B71C
   EX AF, AF       ; 7F4F 08      ; recupera AF de AF
   ; Si AnalyzeUserCommand devolvió Z=0 llama a ExecuteGetB6fb y si éste retorna Z=0 recupera registros
   ; y retorna con Z=0 (Supongo que EXITO)
   JR Z, i_7F57       ; 7F50 28 05      ; Si flag Z = 1, Salta a i_7F57
   CALL ExecuteGetB6fb    ; 7F52 CD ED 7A   ; llama ExecuteGetB6fb
   JR NZ, i_7F2F       ; 7F55 20 D8      ; Si Z = 0, Salta a i_7F2F
   ; Si AnalyzeUserCommand devolvió Z=1 o ExecuteGetB6fb devolvió Z=1
   ; Llama a FreeActorEntries, pone Z=1 y recupera registros y retorna (Supongo que FRACASO)
i_7F57: LD A, (ActionActor)    ; 7F57 3A EA B6   ; Carga ActionActor
   CALL FreeActorEntries    ; 7F5A CD 60 7F   ; llama FreeActorEntries
   XOR A          ; 7F5D AF      ; borra A, flag Z = 1
   JR i_7F2F       ; 7F5E 18 CF      ; Sale via i_7F2F



Si fracasa y el actor no es Bilbo, además borra el resto de entradas que pudiera haber para ese personaje (que parece lógico). Es cuestión de ver dónde se rellena ese área y con qué información y ya estaría todo más o menos claro.

Una pregunta: ¿se procesan aquí los comandos de usuario? Quiero decir si cuando el usuario introduce una orden, ésta se parsea y se rellenan datos en el área de 8x25 para luego tratarlos o si se ejecutan directamente...7F1A Se llama sólo desde el bucle de scripts de antes y desde un par de comandos de script (de Bard y Gollum).

Empiezo a pensar que este bucle de scripts 980e no solo hace esto sino que ejecuta todas las acciones asociadas a todos los personajes, incluyendo las del área de 8x25 como se ve.... igual hasta las de usuario así que podría ser una pieza clave y llamarse ProcessCharacters o ProcessAllPendingCommands o algo similar.

Avatar de Usuario
pser1
Mensajes: 2213
Registrado: 08 Dic 2012 18:34
Agradecido : 296 veces
Agradecimiento recibido: 310 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 13 Ene 2015 15:16

@Chema
muchas gracias.
Te has pegado una buena currada -thumbup
Me lo he descargado y le echaré una ojeada en cuanto acabe con el L_6DD6 o éste acabe con mi paciencia.
Y la montaña de casos a probar en cuanto esté codificada esta parte, me aterra!
Me pillas de lleno con la susodicha conversión, que contiene además la escritura en la parte superior de pantalla y, por lo que veo,
voy a tener que ceñirme a su manera de hacerlo en lugar de emplear la mía (que era mucho mas corta en código), pero es que aquí
hacen otras cosas y manipulan muchas variables L_xxxx que de no ser actualizadas como en el original igual nos dan problemas mas adelante.

saludos
pere

Cuando revise tu mensaje, actualizaré el fuente en el otro hilo


Volver a “Proyecto The Hobbit 6809 por pser1”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado