Madonna Mk 2
Visitante
|
|
« : 09 de Diciembre de 2009, 05:44:20 pm » |
|
A raíz de las incompatibilidades detectadas en Retaliot con MSX1, creo que sería interesante mover el tema de los emuladores para que ofrecieran una emulación más fiel de los pormenores del VDP en dicha generación como una herramienta complementaria de ayuda al desarrollo.
Los principales emuladores actuales para Spectrum por ejemplo, ostentan un nivel de exactitud tan alto que te permiten poder desarrollar con la tranquilidad de que tu código se ejecutará perfectamente en las máquinas reales (aunque nunca hay que dejar de probarlo en ellas, por supuesto), ahorrando tiempo de desarrollo ya que las pruebas en real no tienen que ser tan frecuentes, y también permitiéndote probar configuraciones que puedas no tener físicamente.
Con Seleniak ya ocurrió el tema del wait-state en M1. Me parece que en el 2004 NINGÚN emu lo tenía en cuenta (el blueMSX fue actualizado a raíz del descubrimiento.)
Creo que hay información de sobra en cuanto a la contención del VDP para poder implementar dichos aspectos, y la que pudiera faltar, se podría sacar mediante las pruebas-ensayos-ajustes sobre máquina real y emulador pertinentes. Si dicha emulación enlenteciera demasiado el rendimiento, siempre se podría hacer opcional (seleccionable entre modo standard y accurate.) Tampoco veo problema en que algunas máquinas tuvieran que parametrizarse especialmente, ya que podrían entrar dichos parámetros en los ficheros de configuración.
|
|
« Última modificación: 09 de Diciembre de 2009, 05:46:16 pm por Madonna Mk 2 »
|
En línea
|
|
|
|
Jon_Cortazar
|
|
« Respuesta #1 : 09 de Diciembre de 2009, 06:01:03 pm » |
|
Es lo que os pasa a los que os pasáis mil pueblos, si es queeeee... Yo tuve mi experiencia con Malaika Prehistoric Quest... en un momento concreto del desarrollo, antes de hacer la versión física del juego, detecté corrupciones en gráficos (más bien, me las detectaron, jeje) y en parte del marcador al hacer las pruebas en el hard real: no se veían en ningún momento ni en el blue ni en el nlmsx. Tal vez las prisas nos hagan tirar en gran parte de emulador para desarrollar, y estaría bien que los emus tuvieran en cuenta las pausas necesarias para outear datos al VDP en MSX1, pero bien cierto es que lo mejor es probar en la máquina real, sobre todo cuando nuestro juego es muy exigente. O si no, si se va de culo de tiempos, tirar de testers, y que te hagan ellos el trabajo de campo, que, como siempre, cuatro ojos ven siempre más que dos. Estoy seguro de que si comentas por aquí a la gente que se quede todo último dia del dev echándote una mano probando lo que fueras compilando en una máquina real, fijo que encontrabas algún usuario hardcore que pudiera ayudarte. Pero vamos, queda claro que, en situaciones críticas, los emuladores no reflejan la realidad del MSX1...
|
|
« Última modificación: 09 de Diciembre de 2009, 06:06:10 pm por Viejo_archivero »
|
En línea
|
Jon Cortázar Abraido (aka El Viejo Archivero) RELEVO Videogames [Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.] [pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
|
|
|
Mortimer
|
|
« Respuesta #2 : 09 de Diciembre de 2009, 06:33:53 pm » |
|
Bueno, técnicamente lo que comentáis no es difícil, enlentecería un poco la emulación pero en condiciones normales en PCs normales sobrarían literalmente miles de millones de ciclos, así que no sería un problema, y menos sí se hace opcional. Otro asunto más delicado sería el dónde poner el corte, y si por hacer esto algún juego que funciona en un MSX real dejara de funcionar en un emulador... Es decir, que la regla no es tan secilla como controlar en que tic fue el anterior out y ver si el nuevo es muy cercano, porque dependerá de la cadencia, de si estamos en retrazo, del modo screen... Y ya no sé de otras cosas como si hay muchos sprites en pantalla por ejemplo. ¿Esta ya determinado el mínimo que funciona en todas las máquinas?
Quizás se podía hacer una solución básica que es la que yo hago en el emulador que tengo entre manos: como nació para hacer desarrollo rápido de juegos con funciones de alto nivel, no tenía sentido que luego de hacer algo no fuera viable en una máquina real porque por ejemplo no hubiera ancho de banda con la vram, así que tengo la opción de monitorizar el tic en que se hace cada escritura al vdp entre cada retrazo (Se escribe en in .log), y luego se podría analizar si hay alguna serie que no funcionarían en una máquina real...
|
|
|
En línea
|
|
|
|
Madonna Mk 2
Visitante
|
|
« Respuesta #3 : 09 de Diciembre de 2009, 07:23:34 pm » |
|
Es lo que os pasa a los que os pasáis mil pueblos, si es queeeee... Ya decía mi madre que tanto OUTI en plena calle no podía ser bueno Yo tuve mi experiencia con Malaika Prehistoric Quest... en un momento concreto del desarrollo, antes de hacer la versión física del juego, detecté corrupciones en gráficos (más bien, me las detectaron, jeje) y en parte del marcador al hacer las pruebas en el hard real: no se veían en ningún momento ni en el blue ni en el nlmsx. Tal vez las prisas nos hagan tirar en gran parte de emulador para desarrollar, y estaría bien que los emus tuvieran en cuenta las pausas necesarias para outear datos al VDP en MSX1, pero bien cierto es que lo mejor es probar en la máquina real, sobre todo cuando nuestro juego es muy exigente. Sí. El problema al fin y al cabo son las prisas. Porque realmente el mover el "campo de OUTIs" fuera de la zona segura del VBL fue una (desafortunada) decisión tomada en las últimas horas a causa de que nos salíamos del frame y hubo que usar double buffering. Es posible que aun hubiéndolo probado en máquina real se hubiera escapado algo por el gran movimiento que hubo en el kernel en los últimos instantes, que habría imposibilitado probarlo suficientemente a fondo, pero en fin, a lo hecho, NEXT N. Las deadlines de los concursos van en parte bien para obligarte a cumplir con un plazo, pero como son INTERRUPCIONES NO ENMASCARABLES, cuando acaba, acaba, y afrontar un proyecto con cara y ojos desde el cero absoluto en 2 meses con poquísimo tiempo dedicable al día he visto que no es aconsejable. Para la próxima a ver si me sincronizo con la interrupción. O si no, si se va de culo de tiempos, tirar de testers, y que te hagan ellos el trabajo de campo, que, como siempre, cuatro ojos ven siempre más que dos. Estoy seguro de que si comentas por aquí a la gente que se quede todo último dia del dev echándote una mano probando lo que fueras compilando en una máquina real, fijo que encontrabas algún usuario hardcore que pudiera ayudarte. Es la solución más lógica, pero tiene 2 inconvenientes a mi modo de ver: - El planteamiento del kernel que "bombardea el hierro" puede variar muchas veces durante el desarrollo, y es lo más delicado en cuanto a compatibilidad, por lo que no veo viable probarlo sólo el último día.
- La otra opción sería pasar el build actual del juego frecuentemente a bastantes beta-testers de confianza que cubrieran un rango de máquinas lo más amplio posible, lo que quitaría no sólo el factor sorpresa para esa cantidad importante de gente, sino que con los cambios que sufre el juego, para muchas de esas personas la opinión del juego va empeorando (esto lo tengo comprobado empíricamente).
Supongo que la única manera de asegurarse será pasárselo a Ramones y obtener su sello
|
|
|
En línea
|
|
|
|
Madonna Mk 2
Visitante
|
|
« Respuesta #4 : 09 de Diciembre de 2009, 07:27:44 pm » |
|
Y ya no sé de otras cosas como si hay muchos sprites en pantalla por ejemplo. ¿Esta ya determinado el mínimo que funciona en todas las máquinas? Creo que no es nada que no se pueda obtener empíricamente con rutinas-experimento adecuadas. Así se hizo en el Spectrum antes de que estuvieran disponibles los diagramas internos de la ULA, los cuales corroboraron los resultados. Por cierto, ¿no estan disponibles los diagramas del TMS? ¡Darth 007, te necesitamos!
|
|
|
En línea
|
|
|
|
Mortimer
|
|
« Respuesta #5 : 09 de Diciembre de 2009, 07:55:47 pm » |
|
Y ya no sé de otras cosas como si hay muchos sprites en pantalla por ejemplo. ¿Esta ya determinado el mínimo que funciona en todas las máquinas? Creo que no es nada que no se pueda obtener empíricamente con rutinas-experimento adecuadas. Así se hizo en el Spectrum antes de que estuvieran disponibles los diagramas internos de la ULA, los cuales corroboraron los resultados. Por cierto, ¿no estan disponibles los diagramas del TMS? ¡Darth 007, te necesitamos! Pues sí, se pueden definir las pruebas y hacerlas, no creo que ningún emulador tenga inconveniente en adaptarse a los resultados... Yo tengo por algún lado el documento de la patente del TMS, que creo que es bastante detallado al respecto, luego lo busco y lo subo si no lo tiene nadie más.
|
|
« Última modificación: 09 de Diciembre de 2009, 08:12:58 pm por Mortimer »
|
En línea
|
|
|
|
Madonna Mk 2
Visitante
|
|
« Respuesta #6 : 09 de Diciembre de 2009, 08:44:36 pm » |
|
Pues sí, se pueden definir las pruebas y hacerlas, no creo que ningún emulador tenga inconveniente en adaptarse a los resultados... Por mi parte me ofrezco para participar en la investigación y documentación seria y detallada del tema (con los ensayos registrados y compuestos pulcramente en LaTeX, y lo que haga falta, LOL!) Yo tengo por algún lado el documento de la patente del TMS, que creo que es bastante detallado al respecto, luego lo busco y lo subo si no lo tiene nadie más. ¡Ostras, pues eso sería ultra-crucial!
|
|
|
En línea
|
|
|
|
Mortimer
|
|
« Respuesta #7 : 09 de Diciembre de 2009, 09:14:40 pm » |
|
Pues aquí os dejo el enlace al documento en cuestión: http://www.megaupload.com/?d=TKF3K9TBY yo también me ofrezco a participar en las pruebas, y a que mi emulador sea el primero en cumplirlas excrupulosamente Y bueno, ya que estamos, quizás podemos aprovechar para otras lagunas que quedan por ahí, como el VDP Toshiba y los modo mixtos...
|
|
|
En línea
|
|
|
|
Madonna Mk 2
Visitante
|
|
« Respuesta #8 : 09 de Diciembre de 2009, 09:26:24 pm » |
|
Gracias, pero a mi no me rula De todas maneras lo he encontrado aquí: http://www.smspower.org/dev/docs/wiki/uploads/VDP/TMS9918Patent.pdfEstá de-pu-tí-si-ma-ma-dre, más detallada que la patente del Spectrum. Crucial!!! Y yo también me ofrezco a participar en las pruebas, y a que mi emulador sea el primero en cumplirlas excrupulosamente Perfecto Mortimer! Pues venga, a ver quién más se anima Y bueno, ya que estamos, quizás podemos aprovechar para otras lagunas que quedan por ahí, como el VDP Toshiba y los modo mixtos... Sí. Los modos chungos tienen su explicación en hard. Es apasionante entenderlos y utilizarlos en la medida que sea posible, como las instrucciones no documentadas del Z80.
|
|
|
En línea
|
|
|
|
Ramones
Visitante
|
|
« Respuesta #9 : 09 de Diciembre de 2009, 09:56:14 pm » |
|
Supongo que la única manera de asegurarse será pasárselo a Ramones y obtener su sello Ya me he hartado de decirlo por aquí. Disponible estoy para probar las cosas. En cualquier caso, sobre el Retaliot... pues hombre, mirando el código, si, un emulador "perfecto" te hubiese avisado hace mucho tiempo de los problemas. Pero al final sabiendo 3 ó 4 cosas básicas no habrías tenido problemas... En tu caso son tres: - Usar 099h y 098h directamente: Prohibido en MSX1 (pero que no pasa nada, hay muchos juegos así) - Búsqueda y posicionamiento de la memoria en página 0 totalmente incorrecto: De nuevo no pasa nada ... hay muchos juegos así. - No poner las esperas necesarias entre outs/outi (porque lo de otir es como superavanzado para MSX1, casi inusable), que es realmente le problema más grave del Retaliot. Como bien dices, si, el campotraviesa y la falta de experiencia es lo que jode todo. Pero bueno, de estas cosas se aprende. Lo mejor es darse cuenta y saber corregirlo para el futuro. Eso si... otra vez os voy a hacer yo tutoriales de cómo buscar la memoria en MSX y demás... si es que luego no le hacéis ni caso. xD
|
|
|
En línea
|
|
|
|
makinavaja
|
|
« Respuesta #10 : 09 de Diciembre de 2009, 10:50:36 pm » |
|
Pero es que no solo son problemas como los aquí indicados.
Luego hay cosas tan divertidas como el famoso modo mixto para msx1, que hasta hace poco no se descubrió la problemática, ...y es que recordemos que, sin ir más lejos, hay MSX1 que tienen vdps de una marca y MSX1 que tienen de otras marcas, y tener una marca u otra implica que cosas como el modo mixto no funcionen (y que por tanto ya no sean usados en más desarrollos), pero claro, cualquier emulador se pasa eso por el forro.
Yo con mi hb-55p puedo ayudar, con sus 16KB de RAM a veces me siento obligado a usar una expansión de RAM externa para hacer funcionar segun que juegos, pero esta solución no siempre funciona con todos los juegos.
Makinavaja
|
|
|
En línea
|
|
|
|
Ramones
Visitante
|
|
« Respuesta #11 : 09 de Diciembre de 2009, 11:32:31 pm » |
|
Yo con mi hb-55p puedo ayudar, con sus 16KB de RAM a veces me siento obligado a usar una expansión de RAM externa para hacer funcionar segun que juegos, pero esta solución no siempre funciona con todos los juegos.
Makinavaja
Sip, razón llevas en el modo mixto. Y otra cosa que no es NORMA de MSX y el TMS original si tiene, es el flag del 5º sprite. El chip lleva implementado ese flag... pero el MSX o la norma MSX no, así que algunos VDPs de Toshiba SI soportan el modo mixto pero NO soportan este flag (hace mil tonterías como indicarte que hay 5 sprites en linea y luego un número de plano que... no está en pantalla!!). De hecho es que si os fijáis no hay ningún juego clásico que haga uso de él. Y si los clásicos conocidos no lo usan, imagino que son de fiar. Tendrían documentación de primera mano. Por poner un ejemplo, Konami no lo usó nunca (y tenía rutinas para controlar el 5º sprite). Pero bueno, también es cierto que Konami no es precisamente muy fina para según que cosas, más bien eran brutotes. Así que, ya que Mortimer parece decidido a implementar un modo MSX1 compatible, emulando las esperas del VDP, etc, etc... no estaría de más que emulase también estas cosas. (O mejor dicho NO las emulase) en algun modo específico de su emulador. No se, algo como "MSX 100% Compatible System" o que se yo. Temías que no te fuese algún juego...pues yo te digo que de los clásicos te irán todos o casi todos. Los que fallarán son los actuales. Pero vamos que para eso está lo de poder activar o no ese modo que te comento. Y, leches, a los desarrolladores nos harás felices si implementas estas cosas (o no las implementas xD) porque así podremos desarrollar más rápido y con más seguridad. Aunque como ya he repetido antes, al final son 3 cositas que tener en cuenta. Y, bueno, que lo suyo es probar luego todo en los MSX reales (y por favor, JUGARLO en los MSX reales).
|
|
|
En línea
|
|
|
|
j4mk3
|
|
« Respuesta #12 : 10 de Diciembre de 2009, 08:53:03 am » |
|
- Usar 099h y 098h directamente: Prohibido en MSX1 (pero que no pasa nada, hay muchos juegos así) - Búsqueda y posicionamiento de la memoria en página 0 totalmente incorrecto: De nuevo no pasa nada ... hay muchos juegos así. - No poner las esperas necesarias entre outs/outi (porque lo de otir es como superavanzado para MSX1, casi inusable), que es realmente le problema más grave del Retaliot.
Esto me interesa Podria ustes hacer un post especial titulado: "Lo que nunca debes hacer en tu codigo para hacerlo 100% compatible MSX". No explicando como hacer sino solo lo prohibido, como la primera linea que has puesto del prohibido 99h-98h. Luego ya nos apañariamos entre todos para decir alternativas compatibles o buscarnos la vida que es más divertido. En mi caso, me interesa a nivel de hacer una ROM 32ks MAX...que estoy empezando Ya para el MSX2 otro gallo cantaria. Arigatoo. EDIT : Vale , ya lo veo...hay tuto namas entrar en este foro Me sirve no para lo de la ROM de 32 ? P.D: Y por que no se lo lee los desarroladores si tan a mano está !? XD XD
|
|
|
En línea
|
--- G Fan --- Galious & Gradius & G Boys --- --- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
|
|
|
Mortimer
|
|
« Respuesta #13 : 10 de Diciembre de 2009, 09:18:36 am » |
|
El documento es el mismo que yo tenía, pero aunque lo explique todo con pelos y señales, seguramente en las máquinas reales su respuesta también vendrá dada por las de la memoria y demás componentes que intervengan. Así que nos harán faltan muchas pruebas de campo para buscar la velocidad máxima a la que escribir...
|
|
|
En línea
|
|
|
|
Mortimer
|
|
« Respuesta #14 : 10 de Diciembre de 2009, 09:44:45 am » |
|
Sip, razón llevas en el modo mixto. Y otra cosa que no es NORMA de MSX y el TMS original si tiene, es el flag del 5º sprite. El chip lleva implementado ese flag... pero el MSX o la norma MSX no, así que algunos VDPs de Toshiba SI soportan el modo mixto pero NO soportan este flag (hace mil tonterías como indicarte que hay 5 sprites en linea y luego un número de plano que... no está en pantalla!!). De hecho es que si os fijáis no hay ningún juego clásico que haga uso de él. Y si los clásicos conocidos no lo usan, imagino que son de fiar. Tendrían documentación de primera mano. Por poner un ejemplo, Konami no lo usó nunca (y tenía rutinas para controlar el 5º sprite). Pero bueno, también es cierto que Konami no es precisamente muy fina para según que cosas, más bien eran brutotes. Así que, ya que Mortimer parece decidido a implementar un modo MSX1 compatible, emulando las esperas del VDP, etc, etc... no estaría de más que emulase también estas cosas. (O mejor dicho NO las emulase) en algun modo específico de su emulador. No se, algo como "MSX 100% Compatible System" o que se yo. Temías que no te fuese algún juego...pues yo te digo que de los clásicos te irán todos o casi todos. Los que fallarán son los actuales. Pero vamos que para eso está lo de poder activar o no ese modo que te comento. Y, leches, a los desarrolladores nos harás felices si implementas estas cosas (o no las implementas xD) porque así podremos desarrollar más rápido y con más seguridad. Aunque como ya he repetido antes, al final son 3 cositas que tener en cuenta. Y, bueno, que lo suyo es probar luego todo en los MSX reales (y por favor, JUGARLO en los MSX reales). Bueno, con eso de que la norma no lo contemple, no estoy de acuerdo del todo, la norma indica que el chip de video tiene que ser un TMS9918 o compatible, que está autorizada la escritura directa a puerto (Leyendo antes la dirección en el BIOS), y que diferencias con los comportamientos originales pueden ser subsanados por los fabricantes vía BIOS. Pero como sabemos, con los 'compatibles' Toshiba, ni una cosa ni otra Cierto que la norma no explica cómo usar el flag del 5º sprite, o cómo usar la máscara AND para los modos mixtos, pero tampoco dice que sólo se pueda usar lo que se detalla, igual que tampoco entra a explicar cada opcode del Z80. Además, bueno que lo del modo mixto quizás sea fruto de como está diseñado el chip (Aunque Texas Instruments también lo tenga documentado por algún sitio), pero lo del 5º sprite, está documentado en todos los documentos oficiales, y lo peor, no es que no esté implementado, ¡Es que funciona mal! . Seguramente nunca sabremos si todo esto fue por ahorrar unos yenes, desidia, desconocimiento, problemas de patentes, desición consciente... Pero al fin y al cabo a mi entender fue una chapuza... Además para rematar, luego llega Yamaha, hace un chip compatible y sí que incluye todos estos comportamientos. Pero bueno, volvamos al lado práctico y a 2009 , pienso que lo mejor para todos es asumir que un MSX es la máquina de menor común denominador, y por tanto adaptarnos a ella. En mi emulador de refencia, lo que tengo es unos flags que activan o desactivan el uso de las máscaras sobre el registro R3 y R4, para el 5º sprite la opción que tengo por ahora es emularlo correctamente o no emularlo. La idea era, poder elegir qué tipo de chip estamos usando, que conectará o desactivará los distintos comportamientos, y también crear un chip virtual que fuera algo así como 'lo peor de cada casa', y si funciona en eso, funcionaría en todo. Pero ahora mismo sobre la marcha, se me ocurre otra cosa quizás más interesante: se podría crear un modo de 'comprobación de compatibilidad', en la que se emulase en paralelo los distintos VDPs y se compararan la salidas. Si son distintas, es que algo no se verá bien en alguna máquina...
|
|
|
En línea
|
|
|
|
|