Karoshi MSX Community
05 de Julio de 2021, 08:18:42 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Detectar la emulación  (Leído 7703 veces)
0 Usuarios y 1 Visitante están viendo este tema.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« : 18 de Febrero de 2011, 11:48:59 am »

Os propongo aquí un desafío desde el punto de vista de diseño, ingenio y programación: ¿cómo conseguiríais que un programa detectase que está siendo ejecutado sobre un emulador en lugar de sobre un MSX real? Se puede incluir o no interacción con el usuario para asegurar esta identificación, pero el mecanismo tendría que ser en cualquier caso fiable.

Una opción sería, por ejemplo, enviarle vía OUTI un montón de información a la VRAM fuera del vblank y, a continuación, leer desde VRAM los datos para comprobar si se han escrito correctamente o no. Si se han escrito correctamente, estamos usando un emulador QUE NO IMPLEMENTA BIEN EL TIMING del VDP. Si no se han recibido todos los datos, estamos ante el HARDWARE REAL o ante un emulador que SÍ IMPLEMENTA BIEN EL TIMING de VDP. Como veis, la solución no es perfecta.

Podríamos establecer también una especie de CAPTCHA que sólo funcione adecuadamente en el hardware real. Se me ocurre, por ejemplo, que se haga sonar el relé del REMote del cassette un número aleatorio de veces y luego se pregunte al usuario cuántas veces se ha hecho funcionar. Si no acierta, se bloquea el juego. Evidentemente, hasta ahora los emuladores no implementan este "click" del relé como sonido, pero no funcionaría tampoco en los MSX sin este relé, como son el OCM, los Turbo-R o el Panasonic FS-A1 WSX.

Podríamos tratar de emplear una técnica equivalente y explotar fallos/trucos del VDP no implementados, o jugar a errores en la precisión de algunas temporalizaciones... ¿Cómo lo veis?

¿Se os ocurre alguna idea para hacer esto de una forma fiable? Evidentemente, el objetivo es que si un desarrollador sádico se empeña, obligue a los usuarios a emplear el hardware real. La forma directa de conseguir algo así sería, evidentemente, publicar el juego en cartucho y añadirle lógica adicional para que si se extre la ROM no se pueda jugar en un emulador.

Espero vuestras ideas...

En línea
makinavaja
Karoshi Maniac
****
Mensajes: 388


Email
« Respuesta #1 : 18 de Febrero de 2011, 01:22:12 pm »

Algo de esto me trae buenos recuerdos de un juego que madonna mkii hizo en la dev 04, pero ahora no recuerdo si fue el sink king o el seleniak:  El juego tenía algo todavía no implementado en ninguno de los emuladores existentes (no se si era un registro del z80 que nunca se usa o qué...)
Pero hoy día, y con las herramientas que hay, para el programador de un emu resulta MUY fácil encontrar y parchear ese problema para que el juego funcione en un emulador.

Lo del relé del cassete puede estar bien, pero entonces los usuarios de TR pueden ir olvidándose

Y lo único que se me ocurre ahora mismo ya es a nivel físico/lógico, mediante la inclusión de "algo" dentro del cartucho que genere una respuesta a cierto tipo de acciones: Por ejemplo, la consulta de un código aleatorio consensuado entre cpu y ese chip extra del cartucho cada X ciclos (y en cada consulta un código diferente).  Todo ello implementado en un fpga o algo parecido...  No se si me he explicado.

Venga, saludos

Makinavaja
« Última modificación: 18 de Febrero de 2011, 01:24:07 pm por makinavaja » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #2 : 18 de Febrero de 2011, 01:30:46 pm »

A eso me refería precisamente en el último párrafo, maki: incluir lógica adicional en el cartucho para hacer el archivo ROM injugable en un emulador. Al menos, hasta que se emule correctamente esa lógica adicional... Se me ocurre otro bastante heavy, pero acabaré de pensarlo antes de exponerlo  Grin
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #3 : 18 de Febrero de 2011, 02:52:10 pm »

Creo que se podría requerir por parte del usuario que pulsara ciertas teclas a la vez en el teclado, para comprobar si hay "ghosting" o no. El teclado del MSX permite ciertas pulsaciones simultáneas que los ordenadores de ahora no permiten, por su diferente lógica de filas. La historia es que, con remapear las teclas en el emulador podría salvarse el asunto, aunque se podría ser perro e ir cambiando la combinación de teclas a pulsar: la putada de todo esto es que obviamos la existencia de las Zemmix, que no traen teclado, y con las que ya no se podría jugar el juego al no poder hacer la pulsación requerida... sin contar que los 1chipMSX funcionan con teclados standard...

En fin, que podría ser algo relativo al teclado; habría que pensarlo mmm... (linky), (linky)

Sobre el key ghosting y el key jamming:

Citar
Key ghosting occurs on matrix keyboards for certain combinations of 3 keys. When these three keys are pressed simultaneously a fourth keypress is erroneously registered by the keyboard controller.[4] Modern keyboards detect ghosting and instead of registering a fourth key will ignore the third key, which is known as jamming. Which keys jam when pressed together differs between brands and models of keyboards.

Key jamming is most often noticed when using a keyboard to play action-oriented computer games. The original Star Control game included a utility to test for key jamming and help the player determine the best key mapping for his/her keyboard, since during gameplay it was common for each of the two players to be pressing three or four keys at the same time.

Most modern action-oriented computer games and console emulators use the control, alt, and shift keys by default, since they are always designed to be pressed in combination with other keys, and thus usually circumvent key jamming.

Extraido de la Wikipedia, aquí.
« Última modificación: 18 de Febrero de 2011, 02:57:50 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.]
makinavaja
Karoshi Maniac
****
Mensajes: 388


Email
« Respuesta #4 : 18 de Febrero de 2011, 03:39:09 pm »

Creo que se podría requerir por parte del usuario que pulsara ciertas teclas a la vez en el teclado, para comprobar si hay "ghosting" o no. El teclado del MSX permite ciertas pulsaciones simultáneas que los ordenadores de ahora no permiten, por su diferente lógica de filas. La historia es que, con remapear las teclas en el emulador podría salvarse el asunto, aunque se podría ser perro e ir cambiando la combinación de teclas a pulsar: la putada de todo esto es que obviamos la existencia de las Zemmix, que no traen teclado, y con las que ya no se podría jugar el juego al no poder hacer la pulsación requerida... sin contar que los 1chipMSX funcionan con teclados standard...

En fin, que podría ser algo relativo al teclado; habría que pensarlo mmm... (linky), (linky)

Ummm, yo, personalmente, algo que no entra dentro del standard no sería digno de mi preocupación para hacer un juego compatible.  Me explico: las zemmix solo tienen un slot de cartucho y no llevan teclado.  Creo que con esas dos grandes carencias nos podríamos negar a pensar en una zemix como si fuera un MSX standard(con la misma regla de 3, juegos como metal gear o maze of galious serían incompatibles en una zemmix).  Lo mismo podemos decir del 1chip, que a día de hoy lo veo como un "quiero pero no puedo": Han pasado ya varios años y todavía siguen habiendo bastantes incompatibilidades.  Si en su día hubo gente que dijo NO al modo mixto, yo digo NO a esas plataformas.

Sobre el key ghosting: Hay teclados de pc que soportan eso.

Saludos

Makinavaja
« Última modificación: 18 de Febrero de 2011, 03:41:05 pm por makinavaja » En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #5 : 18 de Febrero de 2011, 05:14:06 pm »

Es un ejercicio interesante, con los últimos avances en emuladores creo que ya quedan pocos aspectos que un programa pueda hacer por sí mismo para detectar si está en una máquina real o no, y aunque encontrásemos alguna laguna posiblemente podría ser solucionado fácilmente por nuevas versiones de los emuladores al saber lo que se espera de ellos. Además, nos encontramos con que dentro de la norma también hay diferencias sutiles o no tanto entre fabricantes y modelos que habría que considerar...

Detectar con participación del usuario quizás sea un poco más fácil, pero tampoco fiable al 100% (Por ejemplo, si lo intentamos con el teclado, como ya apunta maki hay teclados de PC que permiten cualquier combinación de teclas pulsadas) además de resultar engorroso.

Y de todas formas, aunque se pudiera hacer, ¿Cuánto se tardaría en parchear para que funcionase? A no ser que consiguiéramos que precisamente el diferente comportamiento fuera imprescindible para el funcionamiento. Por ejemplo, un juego que dependa de bandas de color en el borde de la pantalla, hubiera sido injugable antes de que los emuladores reflejaran correctamente el cambio del color de borde durante el retrazado.
En línea
Konamito
Karoshi Excellent Member
******
Mensajes: 1446



WWW Email
« Respuesta #6 : 19 de Febrero de 2011, 02:16:21 pm »

Pero mira que sois sádicos... Tongue
En línea

WYZ
Visitante
« Respuesta #7 : 19 de Febrero de 2011, 11:43:44 pm »

Que interesante el tema!

De la opciones expuestas por Edu me quedaría con explotar las posibildades de "error" o "aletoriedad" del VDP. Sobre todo de la deteccion de colisiones y del 5º sprite. Estuve haciendo algunas pruebas con esto y es relativamente fácil detectar la diferencia entre emulador y MSX.

Pero claro, como cualquier comprobación, es susceptible de ser saltada diciendole al resultado de esta que eres un chico bueno que juega en HW real, y como dice Mortimer esta caractaristica del HW debería ser parte sustancial del programa o no sería útil.

Teniendo en cuenta que esto es bastante rebuscado tras la susodicha detección de emulación aludiría a la falta de vegüenza del usuario, al estilo de Gila (alguien ha matado a alguien...) llamándole "emuladero coleccionista" y esperar que la reacción de este sea ponerse colorado y cerrar el emulador inmediatamente.


En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #8 : 20 de Febrero de 2011, 11:51:28 am »

Teniendo en cuenta que esto es bastante rebuscado tras la susodicha detección de emulación aludiría a la falta de vegüenza del usuario, al estilo de Gila (alguien ha matado a alguien...) llamándole "emuladero coleccionista" y esperar que la reacción de este sea ponerse colorado y cerrar el emulador inmediatamente.

LOL
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.]
WYZ
Visitante
« Respuesta #9 : 01 de Marzo de 2011, 05:55:22 pm »

Ouch! pensaba que este tema daría muchisimo mas que hablar y teniendo tanto gurú suelto por ahí, (desoficiaos! dejaos el snail maze), le meterían mano al tema... en fin, se echa de menos alguna respuesta de Sapp, JL, Ramones, MKII, Dioniso...y tantos otros que pululan mas por este foro.
Al final nos vamos a parecer al foro de WOS... miles de respuestas para el post: "Recopilación de juegos con monigotes rojo brillante" Tongue

Viejo! Todo OK?
« Última modificación: 01 de Marzo de 2011, 05:57:19 pm por WYZ » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #10 : 01 de Marzo de 2011, 06:26:42 pm »

Pues sí, también yo me esperaba más de este hilo, aunque lo cierto es que buena parte de la culpa es mía por abrirlo en un momento en el que tenía más trabajo de la cuenta...

Otra técnica que se me ha ocurrido, muy vil y perra es la siguiente:

- Juego en formato CD para cargar a través del puerto de cassette de un MSX real.
- Al acabar la carga, "paramos el cassette" utilizando las rutinas de MOTOR.
- Esto no detendrá en ningún caso el CD, que no tiene conector REM, pero sí la emulación de cassette en un PC.
- A continuación, leemos más bytes del cassette, necesarios para ejecutar el programa correctamente - en el emulador no se leerán nunca, dado que no leerá desde el puerto de cassette si estamos en MOTOR OFF, pero sí en el hardware real.

Me parece que está bastante claro, pero de nuevo, dejamos fuera a los usuarios de Turbo-R. Y se podría solventar la carga en emuladores.

¿Alguna idea feliz más?
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #11 : 01 de Marzo de 2011, 07:58:43 pm »

Viejo! Todo OK?

SI, SI, I'm BACK!!!!  police police police police police
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.]
kabish
Karoshi Maniac
****
Mensajes: 470


caspaflims@hotmail.com
« Respuesta #12 : 01 de Marzo de 2011, 09:40:57 pm »

Recuerdo el tetris 2 special edition de los italianos ram, que llevaba una mochila. Un conector de joystick con un hardware y todo relleno de silicona. Eso en un emulador, en principio, no iria. Creo recordar que habia emuladores que tenian esa opcion, la de reconocer esta mochila y emularla. Aparte desde el mismo emulador, si dispone de un debugger, podriamos parchear la rutina de deteccion en caliente.
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #13 : 01 de Marzo de 2011, 10:36:34 pm »

Se me han ocurrido un par de posibles vías más, una es atacando al PPI, como sabéis en teoría un Intel i8255. Este chip es relativamente complejo, pero en el MSX no se usa al 100%, y quizás los emuladores no hayan contemplado alguna característica que no esté implementada por no ser útil y pueda ser detectada, el problema, es saber si los clones utilizados y los MSX-Engines que lo sustituyen tendrían o no la funcionalidades no utilizadas.

La otra, un poco bruta, que sólo funcionaría si el MSX tiene DRAM y además para refrescarla se utiliza el soporte que proporciona el Z80. (Creo que menos en el Turbo R es la configuración normal). La idea sería incluir un código que sea algo así como:

Código:
       XOR A
bucle: LD R,A
       JR bucle ; suficientes veces

Con lo que evitamos que el registro R prácticamente se incremente, y por tanto, en teoría, el 99% de la RAM se descargará por no ser refrescada, y podremos comprobar si se ha corrompido. Obviamente, esta idea sólo funcionaría para software en ROM
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!