Noticias Mojon Twins

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Noticias Mojon Twins

Mensajepor angel » Jue, 22 May 2014, 20:31

Bienvenido Juan Carlos! Y gracias por las explicaciones :-) aquí seguro que encuentras colegas para hablar de estos temas :D


Y ya nos contarás avances del ninjajar!
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Noticias Mojon Twins

Mensajepor Hark0 » Jue, 22 May 2014, 20:31

Me ha encantado la explicación!!!! Bienvenido!

;)

Y que cada día me entere de cosas nuevas del viejo ZX!!!!
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
jcgamestoy
Mensajes: 6
Registrado: Jue, 22 May 2014, 19:09

Re: Noticias Mojon Twins

Mensajepor jcgamestoy » Jue, 22 May 2014, 20:39

na_th_an escribió:... Y sobre $C0, como es el caso de Ninjajar.

El registro I se utiliza en el modo IM2, que es el que usamos nosotros para que salte una interrupción cada 20ms y ahí llamemos al player. Es por eso que la música de Ninjajar se escucha siempre a la misma velocidad sin importar la contención del modelo donde se ejecute (incluso los clones rusos como Pentagon o Scorpion). Nuestra rutina de servicio de interrupción necesita I = $F0 para ser accesible y de ahí viene el problema.

Como siempre que paginamos/usamos las otras páginas de RAM es para obtener datos almacenados y en momentos puntuales, las interrupciones están deshabilitadas y nos podemos permitir poner momentaneamente I = 0, lo que soluciona el problema la mayor parte del tiempo. No es una solución óptima, pero sí lo suficientemente buena. Ya nos han reportado que la nieve se reduce al mínimo en hardware real :)

Sí es cierto lo del sample, que está en RAM1. Tampoco es algo que nos preocupe demasiado, la verdad, como para tener que andar montando pifostios y autodetectando modelos :) En los 128/+2 se escucha un poco más grave (y levemente más distorsionado) que en los +2A o en los Pentagon/Scorpion (que no tienen contención), pero tampoco nos molesta :D

¡Bienvenido al foro!


Jarll eso si tiene sentido claro en los 128k la pagina alta esta "contended" y para el modo 2 de interrupciones... es una jodienda.

Veis al final he aprendido algo nuevo. Gacias!! :lol:
Avatar de Usuario
Metalbrain
Mensajes: 9
Registrado: Mié, 21 May 2014, 21:19

Re: Noticias Mojon Twins

Mensajepor Metalbrain » Jue, 22 May 2014, 21:03

¡Saludos a todos!

Primer post por aquí. Estoy seguro de que la mayoría me conoce de otros sitios, o al menos de los créditos de muchos de los juegos mojones, por eso de la optimización de la rutina descompresora... a los que no me conocen decir que soy un loco del ensamblador, ex-compañero de los mojones en CEZ GS (donde programé el I Need Speed para Spectrum y MSX), y actualmente miembro de un grupo de la competencia, Retroworks.

jcgamestoy escribió:
na_th_an escribió:... Y sobre $C0, como es el caso de Ninjajar.

El registro I se utiliza en el modo IM2, que es el que usamos nosotros para que salte una interrupción cada 20ms y ahí llamemos al player. Es por eso que la música de Ninjajar se escucha siempre a la misma velocidad sin importar la contención del modelo donde se ejecute (incluso los clones rusos como Pentagon o Scorpion). Nuestra rutina de servicio de interrupción necesita I = $F0 para ser accesible y de ahí viene el problema.

Como siempre que paginamos/usamos las otras páginas de RAM es para obtener datos almacenados y en momentos puntuales, las interrupciones están deshabilitadas y nos podemos permitir poner momentaneamente I = 0, lo que soluciona el problema la mayor parte del tiempo. No es una solución óptima, pero sí lo suficientemente buena. Ya nos han reportado que la nieve se reduce al mínimo en hardware real :)

Sí es cierto lo del sample, que está en RAM1. Tampoco es algo que nos preocupe demasiado, la verdad, como para tener que andar montando pifostios y autodetectando modelos :) En los 128/+2 se escucha un poco más grave (y levemente más distorsionado) que en los +2A o en los Pentagon/Scorpion (que no tienen contención), pero tampoco nos molesta :D

¡Bienvenido al foro!


Jarll eso si tiene sentido claro en los 128k la pagina alta esta "contended" y para el modo 2 de interrupciones... es una jodienda.


Ojo, esa página alta está en contienda o no, dependiendo de lo que haya paginado en ella (y del modelo de Spectrum). Los problemas aparecen cuando I apunta a una página en contienda. Y además, en todos los 128k+ y la mitad de los +2 grises, no solo afecta con la aparición del efecto ULA-snow, sino que también puede provocar cuelgues si se dan ciertas circunstancias (que no han sido investigadas a fondo). En su día hubo que corregir los juegos Maritrini Freelance Monster Slayer y Cray 5 por estos motivos.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Noticias Mojon Twins

Mensajepor na_th_an » Jue, 22 May 2014, 21:20

Bienvenido, Metalbrain :)

Sí, eso es lo más inquietante. Que los supercuelgues aún no están investigados y, que yo sepa, no los emula ningún emulador. Por suerte pudimos arreglar esos dos juegos en tiempos, pero a mí me tuvo temblando un montón de días.
Como diría Rorshach: "Urm..."
Avatar de Usuario
jcgamestoy
Mensajes: 6
Registrado: Jue, 22 May 2014, 19:09

Re: Noticias Mojon Twins

Mensajepor jcgamestoy » Jue, 22 May 2014, 21:52

Metalbrain escribió:¡Saludos a todos!

Primer post por aquí. Estoy seguro de que la mayoría me conoce de otros sitios, o al menos de los créditos de muchos de los juegos mojones, por eso de la optimización de la rutina descompresora... a los que no me conocen decir que soy un loco del ensamblador, ex-compañero de los mojones en CEZ GS (donde programé el I Need Speed para Spectrum y MSX), y actualmente miembro de un grupo de la competencia, Retroworks.

jcgamestoy escribió:
na_th_an escribió:... Y sobre $C0, como es el caso de Ninjajar.

El registro I se utiliza en el modo IM2, que es el que usamos nosotros para que salte una interrupción cada 20ms y ahí llamemos al player. Es por eso que la música de Ninjajar se escucha siempre a la misma velocidad sin importar la contención del modelo donde se ejecute (incluso los clones rusos como Pentagon o Scorpion). Nuestra rutina de servicio de interrupción necesita I = $F0 para ser accesible y de ahí viene el problema.

Como siempre que paginamos/usamos las otras páginas de RAM es para obtener datos almacenados y en momentos puntuales, las interrupciones están deshabilitadas y nos podemos permitir poner momentaneamente I = 0, lo que soluciona el problema la mayor parte del tiempo. No es una solución óptima, pero sí lo suficientemente buena. Ya nos han reportado que la nieve se reduce al mínimo en hardware real :)

Sí es cierto lo del sample, que está en RAM1. Tampoco es algo que nos preocupe demasiado, la verdad, como para tener que andar montando pifostios y autodetectando modelos :) En los 128/+2 se escucha un poco más grave (y levemente más distorsionado) que en los +2A o en los Pentagon/Scorpion (que no tienen contención), pero tampoco nos molesta :D

¡Bienvenido al foro!


Jarll eso si tiene sentido claro en los 128k la pagina alta esta "contended" y para el modo 2 de interrupciones... es una jodienda.


Ojo, esa página alta está en contienda o no, dependiendo de lo que haya paginado en ella (y del modelo de Spectrum). Los problemas aparecen cuando I apunta a una página en contienda. Y además, en todos los 128k+ y la mitad de los +2 grises, no solo afecta con la aparición del efecto ULA-snow, sino que también puede provocar cuelgues si se dan ciertas circunstancias (que no han sido investigadas a fondo). En su día hubo que corregir los juegos Maritrini Freelance Monster Slayer y Cray 5 por estos motivos.


Si claro cuando este pagina una pagina en contienda, quería decir eso pero he abreviado demasiado.

Muy interesante lo de los súper cuelgues. :shock: y decís que solo en la mitad de los +2 grises ¿? puede que tenga que ver con el "floating bus" (no los autobuses no flotan no lo hagáis en casa) ya que ls dirección de la interrupción en IM2 es el registro I en la parte alta y lo que halla en el bus en la baja y en estos no es siempre $FF, ahora bien se tendrían que comportar igual el 128k y el +2 a no ser que hallan dos versiones diferentes de ULA. Muy interesante.

¿Donde podría conseguir una versión "chunga" de los juegos que dices?

Gracias de antemano.
Avatar de Usuario
jcgamestoy
Mensajes: 6
Registrado: Jue, 22 May 2014, 19:09

Re: Noticias Mojon Twins

Mensajepor jcgamestoy » Jue, 22 May 2014, 22:01

Me autocontesto, la interrupción ocurre siempre de T0 a T32 luego ahí no hay "floating bus" que valga así que he dicho una tontà pero bueno, una cosa que se esta hablando en WOS ahora es que en algunos spectrum 128 la interrupción se levanta durante 34T y en otros durante 35T o incluso 36T pero eso no tendría que provocar un cuelgue brutal. Si leo algo o me acuerdo de algo más os comento.

Un placer hablar de cuestiones técnicas con vosotros. Y para los profanos que quieran que se les explique algo, que lo digan que yo encantado.
Avatar de Usuario
Metalbrain
Mensajes: 9
Registrado: Mié, 21 May 2014, 21:19

Re: Noticias Mojon Twins

Mensajepor Metalbrain » Jue, 22 May 2014, 22:41

jcgamestoy escribió:Muy interesante lo de los súper cuelgues. :shock: y decís que solo en la mitad de los +2 grises ¿? puede que tenga que ver con el "floating bus" (no los autobuses no flotan no lo hagáis en casa) ya que ls dirección de la interrupción en IM2 es el registro I en la parte alta y lo que halla en el bus en la baja y en estos no es siempre $FF, ahora bien se tendrían que comportar igual el 128k y el +2 a no ser que hallan dos versiones diferentes de ULA.


Hay mucha información en este topic del foro de speccy.org:
http://foro.speccy.org/viewtopic.php?f=5&t=2714

Copiando y pegando una parte especialmente interesante:

Un usuario de los foros, llamado VELESOFT, descubrió que existen dos modelos de +2. Unos, que debieron ser los primeros y quizá los menos numerosos, que tenían un defecto en un chip llamado HAL10H8. Este defecto es el culpable de que no se pueda leer el puerto 0x7ffd sin colgar la máquina y que el registro I no pueda contener un valor en el rango 0xC0-0xFF si se ha seleccionado una página de RAM en contienda. Parece ser que en algún momento el defecto fue corregido. De modo que tenemos dos submodelos de +2: unos que son funcionalmente iguales a un 128k con una ROM de Amstrad y los segundos, sin esos fallos.
Avatar de Usuario
Jarlaxe
Mensajes: 212
Registrado: Jue, 09 Ene 2014, 13:44

Re: Noticias Mojon Twins

Mensajepor Jarlaxe » Vie, 23 May 2014, 00:17

Nath, en que parte del código he de meter mano para usar un joystick de dos botones?

Molaría uno para salto y otro para dar fostiones. Sí, reconozco que antiguamente he jugado a infinidad de juegos de Speccy donde el salto se hacía con el "arriba" del stick, pero ahora eso me mata :P

Cuanto daño ha hecho los control pads de las consolas a esta generación. XD
Avatar de Usuario
jcgamestoy
Mensajes: 6
Registrado: Jue, 22 May 2014, 19:09

Re: Noticias Mojon Twins

Mensajepor jcgamestoy » Vie, 23 May 2014, 00:52

Metalbrain escribió:
jcgamestoy escribió:Muy interesante lo de los súper cuelgues. :shock: y decís que solo en la mitad de los +2 grises ¿? puede que tenga que ver con el "floating bus" (no los autobuses no flotan no lo hagáis en casa) ya que ls dirección de la interrupción en IM2 es el registro I en la parte alta y lo que halla en el bus en la baja y en estos no es siempre $FF, ahora bien se tendrían que comportar igual el 128k y el +2 a no ser que hallan dos versiones diferentes de ULA.


Hay mucha información en este topic del foro de speccy.org:
http://foro.speccy.org/viewtopic.php?f=5&t=2714

Copiando y pegando una parte especialmente interesante:

Un usuario de los foros, llamado VELESOFT, descubrió que existen dos modelos de +2. Unos, que debieron ser los primeros y quizá los menos numerosos, que tenían un defecto en un chip llamado HAL10H8. Este defecto es el culpable de que no se pueda leer el puerto 0x7ffd sin colgar la máquina y que el registro I no pueda contener un valor en el rango 0xC0-0xFF si se ha seleccionado una página de RAM en contienda. Parece ser que en algún momento el defecto fue corregido. De modo que tenemos dos submodelos de +2: unos que son funcionalmente iguales a un 128k con una ROM de Amstrad y los segundos, sin esos fallos.


El cuelgue al leer 0x7ffd ya lo tenía implementado :lol: , ahora lo otro no lo sabía. A ver como lo hago porque este bug esta muy poco claro. Tengo un par de ideas rocanbolescas para explicar este comportamiento:

La primera i más lógica es que al entrar en conflicto la ula y el refresco de la RAM del z80 la RAM no se refresqué y se corrompa, lo cual haria el cuelgue totalmente aleatorio.

Y la segunda sería más determinista y es que cuando se hace el refresco el hal10h8 este se lía y cree que están escribiendo en $7ffd, hace alguna paginación y se va todo al garete.

Si fuera la segunda se podría hacer un test para probar en un +2 o en un "toastrack" para comprobarlo. Este fin de semana si me dejan lo investigo ya tengo pasatiempos.

Volver a “General”

¿Quién está conectado?

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