Tutorial ensamblador (IV) – Manejo del ratón

Cuarta parte de esta serie de interesantes artículos sobre ensamblador, creada por Armando Pérez (Ramones).

1.- INTRODUCCION

En este ejemplo se muestra como manejar el ratón en MSX. Como extra esta rutina es compatible con todos los MSX, incluido los MSX de primera generación que no cuentan con rutina de lectura de MOUSE en su bios.

Para compatibilizar la rutina con todos los MSX, la rutina de lectura de ratón propia del programa solo es usada en los MSX de primera generación. Si el MSX es 2 o superior, se hace uso de sus propias rutinas de la BIOS. Esta diferencia está marcada sobre todo por el MSX Turbo R, que necesita en caso de estar el R800 activado más retardos que un MSX normal, que su propia Bios hace con el reloj interno del ordenador.

En el mismo ejemplo, además, se muestra como detectar que tipo de MSX está ejecutando la aplicación y una forma de activar los 60hz en máquinas con un VDP9938 o superior integrado si pulsamos SELECT mientras arranca la aplicación. Como extra a esta parte, la rutina de búsqueda detecta la presencia de un VDP9938 en un MSX1, como se da en el caso del SVI-738 XPress de SpectraVideo para dejarle la opción de arrancar a 60hz.

2.- INICIALIZACION

Ya conocida de otros ejemplos como el de disco y teclado. En esta ocasión posicionamos Screen 1, pues de esta manera aprovechamos el ejemplo de manejo de ratón contenido en el MSX2 Technical HandBook, que hace uso del mismo.

3.- BUSCANDO EL RATON EN LOS PUERTOS

Esta parte es, como tantas veces, una de esas cosas que se dejan un poco en el aire en todos los manuales y documentos técnicos de los que disponemos en MSX. Realmente no se si existe una forma correcta de detectar el ratón y a la que no le influyan joysticks conectados.

Como norma general, si no disponemos de un ratón conectado en el MSX, al leer su desplazamiento X y su desplazamiento Y, se nos devuelve un 1 en ambos. Es decir, que si durante unas cuantas lecturas el MSX devuelve esos valores, podemos entender que no existe un ratón conectado a ningún puerto.

La rutina [checkmouse] lo que hace es leer los valores de incremento de ambos puertos, y en caso de no ser 1 y 1, nos devuelve en la variable [mouse] el puerto donde ha sido localizado el ratón.

Para asegurarnos leemos durante 60 interrupciones los valores, ya que puede ser conectado el ratón en ese momento.

Si el ratón es detectado el programa nos indica en que puerto ha sido hallado, y continua, en caso contrario se nos informa y el programa termina. (Bucle infinito).

4.- BUCLE PRINCIPAL

No cuenta con ningún misterio. Se lee el ratón completo (incremento de direcciones y botones) y se muestra la información en pantalla.

Hemos querido dar toda la información posible sobre el ratón. Para ello se muestra, el incremento X e Y leido en cada frame, la posicion actual de nuestro cursor y el asterisco (*) que sirve de “puntero” para movernos por pantalla. El ejemplo de pintado del asterisco está extraido directamente del TH, y remodelado para hacer uso de nuestras variables.

Esta rutina [displaymouse], hace uso de los datos leidos en [mouseread] para actualizar las posiciones, además de imprimir el caracter (*).

6.- LECTURA DE DATOS DEL RATÓN

La rutina [gtpadown] hace uso del valor [msxmodel] para utilizar las rutinas de ratón propio o las incorporadas por el propio MSX. Para compatibilizar las entradas de la funcion de la bios GTPAD, la rutina de lectura de ratón propia, hace uso de los mismos valores.

De esta manera una vez implantadas las rutinas en nuestro programa, la llamada a [gtpadown] es única y hace transparente la programación.

La rutina propia ha sido directamente extraida de la BIOS de un MSX2 SONY F700, y se ha comprobado que es funcional en todos los MSX1.

7.- INICIALIZACION DEL MSX (CHECK SYSTEM)

La parte CHECK SYSTEM, nos rellena unos valores que luego son usados en el resto de programa, tales como modelo de msx, vdp, cpu (en caso de ser Turbo R), y además nos da la posibilidad de activar 60hz si mantenemos pulsado SELECT en máquinas con VDP9938 y superior. Esta rutina es muy útil para todos nuestros programas, además de dar un toque de elegancia en nuestros juegos por permitir el cambio de refresco de pantalla.

8.- GENÉRICAS

Una rutina de división simple, y una rutina que pasa un byte a string, haciendo uso de la rutina de división. Esto es valido para el ejemplo. No es muy recomendable hacer uso de esta rutina de división en caso de usar valores de puntaje muy grandes, solo para valores de tipo byte. Para ello es mejor hacer uso del BCD (Konami así lo hacía), y tenemos información sobre ello en [http://www.robsy.net/basico.htm], con un tutorial realizado por Eduardo Robsy.

9.- MSX1 Y OTROS ERRORES

Como tal el MSX1 no cuenta con rutina de ratón. Se han detectado problemas con algunos modelos de MSX1 al hacer uso de las funciones de ratón cuando se tiene conectado el ratón al encender el MSX. Se puede intuir que un MSX2 o superior inicializará el PSG de alguna otra manera.

El resultado negativo es que el ratón se comporta como Joystick. Esto es extraño, puesto que esta “feature” la tienen algunos modelos de MSX. Es conocido que si arrancamos el MSX con el ratón conectado y mantenemos pulsado el botón izquierdo durante el start boot, el ratón se comportará como un joystick en adelante.

Para evitar ese problema es recomendable que el usuario conecte el ratón una vez inicializado el MSX y antes de arrancar el programa. En MSX2 no se han encontrado esos problemas, aun forzando el de las funciones propias de teclado.

Si se descubriese como solucionar el problema se agradecería que se actualizase este artículo.

10.- BIBLIOGRAFÍA

Armando Pérez Abad

(c) 2007 Ramones

majingazetto@gmail.com

Enlace relacionado: Archivo RAR con el tutorial y archivos de ejemplo.

Deja tu comentario sobre esto

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.