Difference between revisions of "EnterMice (Spanish)"

From Enterprise Wiki
Jump to: navigation, search
(Variables de Sistema)
(Especificaciones Tecnicas)
 
(249 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
[[File:EnterMice.png|thumb|600px|EnterMice]]
 
[[File:EnterMice.png|thumb|600px|EnterMice]]
<span style="font-family: calibri; font-size: 1.8em">'''Puertos de Joystick e Interfaz de Ratón PS/2''' para el ordenador Enterprise 64/128</span>
+
<span style="font-family: calibri; font-size: 1.8em">'''Interfaz de Ratón PS/2 y Puertos de Joystick''' para el ordenador Enterprise 64/128</span>
 
==Introducción==
 
==Introducción==
 
Este sofisticado interfaz ha sido diseñado especialmente para el ordenador Enterprise 64/128.
 
Este sofisticado interfaz ha sido diseñado especialmente para el ordenador Enterprise 64/128.
  
Se ha logrado culminar tras seis meses de trabajo de un desarrollador polaco multidisciplinar conocido en importantes foros como "Pear" (a instigación del colega español GFlorez, que también fue el primer probador del EnterMice junto a Zozo).
+
Se ha logrado culminar tras seis meses de trabajo de un desarrollador polaco multidisciplinar conocido en importantes foros como "Pear" (a instigación del colega español GFlorez, que también fue el primer probador del EnterMice junto a Zozo, de Hungría).
  
 
El objetivo principal del adaptador es permitir el uso en el micro-ordenador Enterprise de asequibles ratones PS/2. Además, permite la conexión directa de dos joysticks de norma Atari sin adaptadores adicionales.
 
El objetivo principal del adaptador es permitir el uso en el micro-ordenador Enterprise de asequibles ratones PS/2. Además, permite la conexión directa de dos joysticks de norma Atari sin adaptadores adicionales.
Line 13: Line 13:
  
  
===Un poco de historia sobre Enterprise y ratones===
+
===Un poco de historia sobre el Enterprise y ratones===
  
Mejorar el Enterprise128 con control por ratón no es una nueva y excéntrica idea de un grupo de frikis de los retro-ordenadores, ya estaba previsto por los diseñadores originales del EP. El problema era que la misión de implementarlo fue sub-contratada a Aztec Software Ltd, una modesta compañía inglesa que suministró un resultado decepcionante; por dos razones principales: en primer lugar, el producto era feo
+
Mejorar el Enterprise128 con control por ratón no es una nueva y excéntrica idea de un grupo de frikis de los retro-ordenadores, ya estaba previsto por los diseñadores originales del EP. El problema era que la misión de implementarlo fue sub-contratada a Aztec Software Ltd, una modesta compañía inglesa que suministró un resultado decepcionante, por dos razones principales: en primer lugar, el producto era feo
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/EP_Mouse.jpg], muy lejos de las formas redondeadas del Enterprise. En segundo lugar, no era un ratón adecuado, ya que se basaba en la emulación del movimiento de un joystick. También en ese momento Enterprise  Computing Ltd. estaba desapareciendo.
+
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/EP_Mouse.jpg], muy lejos de las formas redondeadas del Enterprise. En segundo lugar, no era un ratón adecuado, ya que se basaba en la emulación del movimiento de joystick. También en ese momento Enterprise  Computing Ltd. estaba desapareciendo.
  
 
Pero la base de usuarios en el Reino Unido se mantuvo muy activa durante los siguientes años. Entusiastas del Enterprise fundaron pequeñas compañías. Se ofrecieron nuevos productos: ampliaciones de memoria, cables adaptados, juegos, utilidades, emuladores de Spectrum, una controladora IDE, Eprom, expansiones de la placa base, módems RS232, y mas.
 
Pero la base de usuarios en el Reino Unido se mantuvo muy activa durante los siguientes años. Entusiastas del Enterprise fundaron pequeñas compañías. Se ofrecieron nuevos productos: ampliaciones de memoria, cables adaptados, juegos, utilidades, emuladores de Spectrum, una controladora IDE, Eprom, expansiones de la placa base, módems RS232, y mas.
Line 26: Line 26:
 
[https://enterpriseforever.com/hardware/re-paintbox-mouse-xr/?action=dlattach;attach=11329;image], ya había sido adaptado con éxito a otros ordenadores de 8 bits, como el Commodore 64.
 
[https://enterpriseforever.com/hardware/re-paintbox-mouse-xr/?action=dlattach;attach=11329;image], ya había sido adaptado con éxito a otros ordenadores de 8 bits, como el Commodore 64.
  
En ese momento sólo unos pocos ordenadores de 8 bits tenían un ratón que funcione con alguna forma de GUI. Era muy difícil vender algo nuevo de uso desconocido y no completamente integrado en el equipo. Visto desde la perspectiva actual, la ventaja de navegar por los sistemas operativos y aplicaciones con un ratón es obvio, y se nota aun mas en el instante que este deja de funcionar...
+
En ese momento sólo unos pocos ordenadores de 8 bits tenían un ratón que funcionase con alguna forma de GUI. Era muy difícil vender algo nuevo de uso desconocido y no completamente integrado en el equipo. Visto desde la perspectiva actual, la ventaja de navegar por los sistemas operativos y aplicaciones con un ratón es obvia, y se aprecia aun mas en el instante en que este deja de funcionar...
  
  
 
Al final, sólo se vendieron alrededor de un centenar de "Paintbox".
 
Al final, sólo se vendieron alrededor de un centenar de "Paintbox".
  
El programa "Paintbox" llegó a Hungría en solitario. Los húngaros compraron los ordenadores Enterprise sabiendo que procedían de Reino Unido, pero no mucho más. Cuando se vendieron todos los Enterprise128, la base de usuarios fue abandonada tal como en el país de origen. Una vez más, nuevas compañías surgieron ofreciendo nuevos productos. Entonces una empresa llamada "A Studio" comenzó a fabricar y vender los artículos Boxsoft, camuflándolos como si fuesen sus propios productos. Uno de los programas era una versión de "Paintbox" sin la opción del ratón. Todavía necesita el controlador, pero una versión capada. En el lado este del Telón de Acero nadie oyó nunca hablar sobre que era un ratón Neos.
+
El programa "Paintbox" llegó a Hungría en solitario. Los húngaros compraron los ordenadores Enterprise sabiendo que procedían de Reino Unido, pero no mucho más. Cuando se vendieron todos los Enterprise128, la base de usuarios fue abandonada tal como en el país de origen. Una vez más, nuevas compañías surgieron ofreciendo nuevos productos. Entonces una empresa llamada "A Studio" comenzó a fabricar y vender los artículos Boxsoft, camuflándolos como si fuesen sus propios productos. Uno de los programas era una versión de "Paintbox" sin la opción del ratón. Todavía necesitaba el controlador, pero una versión capada. En el lado este del Telón de Acero nadie oyó nunca hablar sobre qué era un ratón Neos.
  
 
Más tarde, en Hungría, salió al mercado una tarjeta de expansión RS232
 
Más tarde, en Hungría, salió al mercado una tarjeta de expansión RS232
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/RS232~3.jpg] para el Enterprise, fruto de la genialidad de un equipo de desarrolladores húngaros: Gyula Mészáros por el hardware, y László Haluska ( HSOFT) para la parte de software. HSOFT tomó el controlador de ratón capado de "A Studio" y lo modificó para adaptarlo a la interfaz serie para su uso con un ratón "Mouse Systems" y después suministraría un controlador integrado para el sistema operativo 2.x EPDOS.
+
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/RS232~3.jpg] para el Enterprise, fruto de la genialidad de un equipo de desarrolladores húngaros: Gyula Mészáros por el hardware, y László Haluska ( HSOFT) para la parte de software. HSOFT tomó el controlador de ratón capado de "A Studio" y lo modificó para adaptarlo a la interfaz serie para su uso con un ratón "Mouse Systems". Mas tarde suministraría un controlador integrado para el sistema operativo 2.x EPDOS.
  
Esto es historia antigua, pero en los últimos años, con la WWW, Internet y la globalización, surgieron algunos de los antiguos artefactos Boxsoft + Neos y todas las piezas del rompecabezas empezaron a encajar. Por fin, las antiguas promesas (vistas en la propaganda de  Enterprise Computers Ltd.) de una verdadera interfaz de ratón para el Enterprise, empezaban a hacerse realidad.
+
Esto ya es historia antigua, pero en los últimos años, con la WWW, Internet y la globalización, han surgido algunos de los antiguos artefactos Boxsoft + Neos y todas las piezas del rompecabezas han empezado a encajar. Por fin, las antiguas promesas (vistas en la propaganda de  Enterprise Computers Ltd.) de una verdadera interfaz de ratón para el Enterprise, empiezan a hacerse realidad.
  
  
 
----
 
----
  
El nuevo interfaz EnterMice que es presentado aquí se basa en el trabajo del equipo Boxsoft, pero adaptado a la actualidad y mejorado con nuevas opciones. (Es un milagro lo que Tim Box logró entonces con solo una pocas puertas lógicas y diodos). En cuanto a la programación, el eficaz controlador fue creado por D. Rabson, Andrew Fitter y Andrew Richards. Con pequeñas modificaciones, es el mismo controlador que se usará con el adaptador Entermice.
+
El nuevo interfaz EnterMice que es presentado aquí se basa en el trabajo del equipo Boxsoft, pero adaptado a la actualidad y mejorado con nuevas opciones. (Es un milagro lo que Tim Box logró entonces con solo una pocas puertas lógicas y diodos[http://enterpriseforever.com/egyeb-temak/paintbox-mouse-xr/?action=dlattach;attach=8032;image]). En cuanto a la programación, el eficaz controlador fue creado por D. Rabson, Andrew Fitter y Andrew Richards. Con pequeñas modificaciones, es el mismo controlador que se usará con el adaptador Entermice.
  
El principal problema que aparece en el momento de conectar un ratón o un joystick  a el Enterprise es que los conectores y sus señales están muy lejos de ser un estándar. Pequeños conectores de borde de placa que pueden ser enchufados al revés, varios comunes conectados a +5v para los botones cuando lo normal es un solo común conectado a cero voltios, falta de protección en los retornos de señal cuando dos o mas botones son pulsados, ningún modo de mandar información o estado al dispositivo, y probablemente algún problema más.
+
El principal problema que aparece en el momento de conectar un ratón o un joystick  a el Enterprise es que los conectores y sus señales están muy lejos de ser un estándar. Pequeños conectores de borde de placa que pueden ser enchufados al revés, varios comunes conectados a +5v para los botones cuando lo normal es un solo común conectado a cero voltios, falta de protección en los retornos de señal cuando dos o mas botones son pulsados, ningún modo de mandar información o estado al dispositivo, y seguramente algún problema más.
  
 
Ahora, lo que Boxsoft creó con asequibles y comunes componentes, ha sido rediseñado y mejorado con dos circuitos integrados programables y otros modernos componentes. Uno de los chips (Xilinx) está al cargo de la conversión de conectores y señales al estándar de puertos de juego Atari. El interfaz original Boxsoft solo ofrecía la conversión del primer puerto de control, que era usado para conectar el ratón Neos o un joystick tipo Atari(nunca al mismo tiempo). En el presente proyecto se pueden conectar dos joystick y eso no interfiere con el conector de Ratón.
 
Ahora, lo que Boxsoft creó con asequibles y comunes componentes, ha sido rediseñado y mejorado con dos circuitos integrados programables y otros modernos componentes. Uno de los chips (Xilinx) está al cargo de la conversión de conectores y señales al estándar de puertos de juego Atari. El interfaz original Boxsoft solo ofrecía la conversión del primer puerto de control, que era usado para conectar el ratón Neos o un joystick tipo Atari(nunca al mismo tiempo). En el presente proyecto se pueden conectar dos joystick y eso no interfiere con el conector de Ratón.
  
El ratón Neos(MSX) no es muy común hoy en día, por lo que se ha incluido un conversor de protocolo de PS/2 a MSX. Lo rige un económico y sencillo Atmel AT89C4051 a 12Mhz, capaz de adaptable to adaptarse a la frecuencia del procesador Z80 instalado en el Enterprise. Con este circuito integrado y la apropiada programación en su interior, Entermice puede funcionar tanto en un EP a 4 MHz como en uno potenciado a 10 MHz, sin problemas.
+
El ratón Neos(MSX) no es muy común hoy en día, por lo que se ha incluido un conversor de protocolo de PS/2 a MSX. Lo rige un económico y sencillo Atmel AT89C4051 a 12Mhz, capaz de adaptarse a la frecuencia del procesador Z80 instalado en el Enterprise. Con este circuito integrado y la apropiada programación en su interior, Entermice puede funcionar tanto en un EP a 4 MHz como en uno potenciado a 10 MHz, sin problemas.
  
También, el protocolo de lectura del ratón ha sido ampliado siguiendo el nuevo protocolo extendido de MSX lanzado por Prodatron(desarrollador de SymbOS) y NYYRIKKI(desarrollador de MSX). Ahora Entermice es capaz de mandar información de hasta cinco botones y una rueda si el ratón los posee.
+
También, el protocolo de lectura del ratón ha sido ampliado siguiendo el nuevo protocolo extendido de MSX lanzado por Prodatron(desarrollador de SymbOS) y NYYRIKKI(desarrollador de MSX). Ahora Entermice es capaz de mandar información de hasta cinco botones y una rueda si están presentes en el ratón.
  
 
==Lista programas compatibles hasta la fecha==
 
==Lista programas compatibles hasta la fecha==
  
Paintbox por medio del controlador de ratón.
+
Multiplay, Iview, Cview, by Istvan-V.[https://enterpriseforever.com/egyeb-temak/pc-gt-ep-kepkonverzio/?action=dlattach;attach=16373]+ File, by Zozosoft.[https://enterpriseforever.com/programozas/file-bovites/?action=dlattach;attach=16380] Internally.
  
The Enterprise Graphical Interfance por medio del controlador de ratón.
+
[[File:File.jpg]]
  
SymbOS internamente, solo en modo Boxsoft, pero pronto en modo EnterMice.
+
Paintbox por medio del controlador de ratón.[https://enterpriseforever.com/programming/issues-on-paintbox/?action=dlattach;attach=14697]
 +
 
 +
[[File:Paintbox.png]]
 +
 
 +
The Enterprise Graphical Interface por medio del controlador de ratón.[https://enterpriseforever.com/other-topics/enterprise-graphical-interface/?action=dlattach;attach=14742]
 +
 
 +
[[File:EGI.JPG]]
 +
 
 +
SymbOS internamente, en EnterMice mode por hack[https://enterpriseforever.com/ep128emu/ep128emu/?action=dlattach;attach=16288].Por Prodatron[https://enterpriseforever.com/programming/symbos-106/?action=dlattach;attach=16637].
 +
 
 +
[[File:SymbOS.png]]
 +
 
 +
 
 +
[http://www.ep128.hu/Ep_Util/Edcw.htm EDC Windows], internamente en modo EnterMice y modo Hsoft driver. Usar este ejecutable modificado: [https://enterpriseforever.com/programming/entermice-option-on-edcw/?action=dlattach;attach=16307]
 +
 
 +
[[File:edcw.png]]
 +
 
 +
SPEmu128 creado por geco, el gran emulador de Spectrum para el Enterprise, ahora es capaz de emular el ratón Kempston en juegos modificados[http://velesoft.speccy.cz/kmsoft.htm], desde el movimiento de ratón de EnterMice. La lista de programas compatibles crece constántemente.[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=15834]
 +
 
 +
[[File:moorhun.png]]
 +
 
 +
===Lista de juegos===
 +
 
 +
Pasziansz(Solitario)[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=16014]. Versión Rom[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=16042]
 +
 
 +
[[File:Pasziansz1.PNG]]
 +
 
 +
SWAP [https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=15993]
 +
 
 +
[[File:swap.gif]]
 +
 
 +
Wolf2004 shoot'em up en primera persona. Convertido de ZX por Geco[https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=16889]
 +
 
 +
[[File:Wolf2004.png]]
 +
 
 +
Bricky Prise. Creado por Geco, Endi y Szipucsu. Adaptado a EnterMice por Isvan-V.  [https://enterpriseforever.com/enterprise-devcompo-1-37/enterprise-program-bricky-prise/?action=dlattach;attach=16580] and [https://enterpriseforever.com/enterprise-devcompo-1-37/enterprise-program-bricky-prise/?action=dlattach;attach=16581]
 +
 
 +
[[File:bricky.png]]
 +
 
 +
Five in a Row. Juego de estrategia programado en Basic. Adaptado a EnterMice por Lacika. [https://enterpriseforever.com/programozas/basic/?action=dlattach;attach=16867]
 +
 
 +
[[File:Fiverow.jpg]]
 +
 
 +
Chess Master 2000. convertido de Amstrad por Geco.[https://enterpriseforever.com/letoltesek-downloads/cpc-jatekok-ep-konverzioi-games-converted-from-cpc/?action=dlattach;attach=16271]
 +
 
 +
[[File:Cm2000.JPG]]
  
 
Puede funcionar en programas escritos en Basic, por medio del controlador de ratón
 
Puede funcionar en programas escritos en Basic, por medio del controlador de ratón
  
Viejos programas que usen el puerto de joystick 1, con EnterMice en modo joystick.
+
Viejos programas que usen el puerto joystick 1, con EnterMice en modo joystick.
 +
 
 +
===Emuladores XEP128  y EP128emu ===
  
EPDOS 2.X internamente, solo con una tarjeta de expansión serie.
+
Incluso aunque no se posea un adaptador EnterMice, se puede experimentar como sería manejar simuladamente un Enterprise con un ratón. Ahora XEP128[http://xep128.lgb.hu/], el gran emulador creado por LGB, es capaz de simularlo  desde el movimiento del ratón de un PC.  Se puede incluso combinar con SPEmu128 para emular un Spectrum dentro del Enterprise emulado. El ratón Kempston obedecerá los movimientos del ratón del PC...
 +
 
 +
 
 +
Aquí[https://enterpriseforever.com/emulators/xep128-1331/msg56458/#msg56458] se encuentra una explicación de como hay que organizar el emulador XEP128 para que funcione correctamente en un PC con Windows.
 +
 
 +
Y aquí[https://github.com/lgblgblgb/xep128/wiki/Installing] hay una explicación para OSX.
 +
 
 +
 
 +
Gracias al trabajo de LGB en su emulador XEP128, IstvanV también ha actualizado EP128emu para que emule el interface EnterMice. Existe un instalador de Windows para mas fácil installación.
 +
 
 +
Puedes descargar la versión mas actual aquí[https://github.com/istvan-v/ep128emu/releases].
  
 
==Descripción General==
 
==Descripción General==
[[File:EnterMice_front.png|thumb|center|600px|Vista frontal del Entermice]]
+
[[File:EnterMice_frente.png|thumb|center|600px|Vista frontal del Entermice]]
[[File:EnterMice_back.png|thumb|center|480px|Vista trasera del Entermice]]
+
[[File:EnterMice_trasera.png|thumb|center|480px|Vista trasera del Entermice]]
  
 
==Importante==
 
==Importante==
Line 78: Line 135:
 
El ratón y los joysticks pueden ser conectados y desconectados mientras el ordenador está encendido, pero no es recomendable.
 
El ratón y los joysticks pueden ser conectados y desconectados mientras el ordenador está encendido, pero no es recomendable.
 
Es mas seguro realizar las conexiones con la fuente de alimentación apagada.
 
Es mas seguro realizar las conexiones con la fuente de alimentación apagada.
 +
 +
<span style="color: red; font-size: 1.7em; font-family: calibri">Atención:</span> Por favor, asegúrese de leer la sección [[EnterMice_(Spanish)#Como conectar otros dispositivos a EnterMice|"Como conectar otros dispositivos a EnterMice"]] antes de conectar algún dispositivo para el cual EnterMice no haya sido diseñado.
  
 
==Conectándolo al ordenador==
 
==Conectándolo al ordenador==
La placa del interfaz debe ser enchufada al mismo tiempo a tres conectores de borde de placa en la parte trasera del tu Enterprise: Control 1, Control 2 y Serial/Net. Puedes apreciar que los conectores de borde de placa están soldados en un ángulo ligeramente mayor de 90 grados. Es completamente intencionado para asegurar que el Entermice se adapte mejor a la forma trasera del Enterprise.
+
La placa del interfaz debe ser enchufada al mismo tiempo a tres conectores de borde de placa en la parte trasera del tu Enterprise: Control 1, Control 2 y Serial/Net. Puedes apreciar que los conectores de borde de placa del interfaz están soldados en un ángulo ligeramente mayor de 90 grados. Es completamente intencionado, para asegurar que el Entermice se adapte mejor a la forma trasera del Enterprise.
  
 
Solo puede ser conectado de una forma determinada, pero puede ser que los terminales no asienten centrados en los conectores de borde de placa. Si así sucede, el contacto puede ser inestable y el ordenador y/o el interfaz pueden no funcionar.
 
Solo puede ser conectado de una forma determinada, pero puede ser que los terminales no asienten centrados en los conectores de borde de placa. Si así sucede, el contacto puede ser inestable y el ordenador y/o el interfaz pueden no funcionar.
Line 116: Line 175:
 
|No usado (de hecho EnterMice como joystick en columna KB K)
 
|No usado (de hecho EnterMice como joystick en columna KB K)
 
|}
 
|}
Joystick 2 nunca cambia, no importa que en que selección de modo se halle el interfaz.
+
Joystick 2 nunca cambia, no importa en que selección de modo se halle el interfaz.
  
  
Line 156: Line 215:
 
==Uso del controlador==
 
==Uso del controlador==
  
Aquí [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=14273] puedes encontrar el controlador.
+
Aquí [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=17554] puedes encontrar el controlador.
  
  
Line 168: Line 227:
 
El uso del ratón no está restringido a programas en código máquina, se puede incorporar muy fácilmente dentro de casi cualquier programa Basic. Para ello es necesario el uso de una extensión del sistema operativo(EXOS) llamado controlador de ratón("Mouse.xr").
 
El uso del ratón no está restringido a programas en código máquina, se puede incorporar muy fácilmente dentro de casi cualquier programa Basic. Para ello es necesario el uso de una extensión del sistema operativo(EXOS) llamado controlador de ratón("Mouse.xr").
  
Este controlador de dispositivo dibujará un puntero en cualquier pantalla gráfica, y mediante el control de los movimientos del ratón moverá en sincronía el puntero por la pantalla.
+
Este controlador de dispositivo dibujará un puntero en cualquier pantalla gráfica o de texto, y mediante el control de los movimientos del ratón el puntero se deslizará en sincronía por la pantalla. El puntero en páginas de texto trabaja internamente en coordenadas gráficas, pero solo es dibujado en casillas de caracteres, por lo que el movimiento será visto como a saltos en gestos cortos.
  
 
El controlador de ratón puede ser dirigido por medio de varios comandos y funciones, por ejemplo mostrar o no el puntero. Hay dos maneras de comunicarse con el controlador de ratón, la primera es mediante la lectura y escritura en el canal del dispositivo, la segunda es por medio de las variables del sistema.
 
El controlador de ratón puede ser dirigido por medio de varios comandos y funciones, por ejemplo mostrar o no el puntero. Hay dos maneras de comunicarse con el controlador de ratón, la primera es mediante la lectura y escritura en el canal del dispositivo, la segunda es por medio de las variables del sistema.
Line 178: Line 237:
 
Una vez instalado seguirá residente hasta el siguiente restablecimiento completo o hasta apagar el ordenador.  
 
Una vez instalado seguirá residente hasta el siguiente restablecimiento completo o hasta apagar el ordenador.  
  
Después, para que funcione correctamente, es necesario inicializarlo con el comando EXOS ":PB". El EGI y Paintbox hacen esto internamente
+
En anteriores versiones, para que funcionase correctamente, era necesario inicializarlo con el comando EXOS ":PB". El EGI y Paintbox hacen esto internamente.
 +
 
 +
Si esta usando aún una versión anticuada del controlador, nunca ejecute dos veces el comando de inicialización, ya que el Enterprise se puede quedar colgado. Ignore el mensaje de error que saldrá. El código de error (obtenido en Basic con la función EXTYPE) es 9.000 + la página de memoria donde se ha cargado el controlador. Este comportamiento fue introducido deliberadamente por los programadores del controlador.
 +
 
 +
La versión actual se auto-inicializa  sola, y no colisiona con antiguos programas que usen el comando :PB, que ha sido eliminado.
 +
 
 +
Instalar varias instancias del controlador no es perjudicial ya que el sistema siempre  va a usar la última, pero es un gasto inútil de memoria.
 +
 
 +
Esta es una manera muy sencilla de detectar en Basic si el controlador ya ha sido instalado:
 +
 
 +
100 WHEN EXCEPTION USE DRIVER_LOADING
 +
110      SET 189,4 ! intenta asignar EnterMice como modo de control. Solo posible una vez instalado el controlador.
 +
120 END WHEN
 +
 
  
Ignore el mensaje de error que saldrá. El código de error (obtenido en Basic con la función EXTYPE) es 9.000 + la página de memoria donde se ha cargado el controlador. Este comportamiento fue introducido deliberadamente por los programadores del controlador.
+
1000 HANDLER  DRIVER_LOADING
 +
1010      EXT "LOAD MOUSE.XR" ! El fichero ha de estar en el directorio actual, si no sucederá otro error.
 +
1020      PRINT "Loading the Mouse Driver"
 +
1030      SET 189,4                  ! Aquí se asume que el controlador ha sido correctamente instalado.
 +
1040 END HANDLER
  
Se puede proporcionar una versión que auto-inicializa sola si se solicita, pero entonces no funcionará con el EGI o con Paintbox, sólo en Basic.
+
Se puede hacer mas complejo y efectivo, asignando a una variable el valor de no-instalado dentro de la subrutina "handler", cargando después el controlador en el programa principal. Así, si el fichero no es encontrado(probablemente estemos en otro directorio), el error podrá ser tratado en la misma subrutina "handler" u otra.
  
Nunca cargue mas de una vez ni ejecute dos veces el comando de inicialización, ya que el Enterprise se puede quedar colgado.
+
Es una buena práctica evitar instalar varias veces el controlador de ratón.
  
  
Ejecutando ":RATÓN" en EXOS nos va a mostrar información sobre la versión del controlador y, si el Entermice está conectado también mostrará información sobre el Interfaz.
+
Ejecutando ":HELP MOUSE" en EXOS nos va a mostrar información sobre la versión del controlador y, si el Entermice está conectado, también mostrará información sobre el Interfaz.
  
 
====Comunicación con el controlador de ratón====
 
====Comunicación con el controlador de ratón====
Line 197: Line 273:
  
 
La primera y más importante tarea es abrir el canal del ratón, es decir:OPEN £?:"MOUSE:" (siendo ? un número de canal).  
 
La primera y más importante tarea es abrir el canal del ratón, es decir:OPEN £?:"MOUSE:" (siendo ? un número de canal).  
 +
 +
Hay que tener en cuenta que un canal de ratón siempre está asociado a un canal de vídeo donde dibujar el puntero. No se puede abrir un canal de ratón sin un canal de vídeo, y si el canal de vídeo desaparece o cambia mientras está abierto el canal de ratón, este lo detectara y se desactivará  a si mismo. Recuerde que el canal permanecerá abierto pero inefectivo.
 +
 +
Para evitar errores,  si un canal de vídeo ha de ser cerrado mientras se ejecuta un programa, antes se debe cerrar el canal de ratón al que está asociado.
 +
 +
También, si un programa  en Basic basado en ratón se detiene, siempre hay que ejecutar CLOSE £? cuando se ejecute TEXT, porque el Editor de Basic  cierra automáticamente el canal de vídeo de gráficos.
  
 
Comandos ejecutados al imprimir caracteres en el canal del ratón:
 
Comandos ejecutados al imprimir caracteres en el canal del ratón:
Line 224: Line 306:
 
|}
 
|}
  
Siempre acesible:
+
Siempre accesible:
  
 
Fire = "1" si el botón principal se ha pulsado, "0" si no.
 
Fire = "1" si el botón principal se ha pulsado, "0" si no.
Line 234: Line 316:
 
!Por defecto
 
!Por defecto
 
|-
 
|-
|style="text-align:center"|180||Canal de video donde se mostrará el puntero||style="text-align:right"|101
+
|style="text-align:center"|180||Canal de vídeo donde se mostrará el puntero||style="text-align:right"|101
 
|-
 
|-
|style="text-align:center"|181||Posicion en la Linea de Estado donde se mostraran las coordenadas X,Y||style="text-align:right"|30
+
|style="text-align:center"|181||Posición en la Linea de Estado donde se mostraran las coordenadas X,Y||style="text-align:right"|30
 
|-
 
|-
|style="text-align:center"|182||Mostrar coordenadas: 1 si, 0 no|style="text-align:right"|0
+
|style="text-align:center"|182||Mostrar coordenadas: 1 si, 0 no||style="text-align:right"|0
 
|-
 
|-
|style="text-align:center"|183||Color del puntero {mas información en sección de tecnología}||style="text-align:right"|255
+
|style="text-align:center"|183||Color del puntero {mas información en [[EnterMice_(Spanish)#Valores_posibles_de_la_variable_EXOS_183_para_cambiar_el_color_del_puntero|sección de tecnología]]}||style="text-align:right"|255
 
|-
 
|-
 
|style="text-align:center"|184||Byte bajo de la coordenada X||
 
|style="text-align:center"|184||Byte bajo de la coordenada X||
Line 250: Line 332:
 
|style="text-align:center"|187||Byte alto de la coordenada Y||
 
|style="text-align:center"|187||Byte alto de la coordenada Y||
 
|-
 
|-
|style="text-align:center"|188||Estado del botón principal: 0 inactivo, 1 pulsado||
+
|style="text-align:center"|188||Estado del botón principal: 0 reposo, 1 pulsado||
 
|-
 
|-
 
|style="text-align:center"|189||Dispositivo de entrada:
 
|style="text-align:center"|189||Dispositivo de entrada:
   0 - Joystick interno
+
   0 - Joystick interno         2 botones, Espacio e Intro
   1 - Control 1
+
   1 - Control 1               3 botones,
   2 - Control 2
+
   2 - Control 2               3 botones
   3 - Boxsoft
+
   3 - Boxsoft                 de 2 a 5 botones
   4 - EnterMice (por defecto)
+
   4 - EnterMice (por defecto) de 2 a 5 botones
   5 - Serial Mouse Sytems
+
   5 - Serial Mouse Sytems     3 botones
   6 - Serial Microsoft en una futura versión del controlador(actualmente 6=5)
+
   6 - Serial Microsoft         2 botones
 
   >6 - No implementado
 
   >6 - No implementado
 
|
 
|
 
|-
 
|-
 
|style="text-align:center"|190||Estado del botón secundario y botones adicionales si existen, contador de impulsos de rueda si existe
 
|style="text-align:center"|190||Estado del botón secundario y botones adicionales si existen, contador de impulsos de rueda si existe
   Bits 0 to 3 medio byte con signo del contador de impulsos de la rueda(7 -> -8)  
+
   Bits 0 a 3, semi-octeto(nibble) con signo, del contador de impulsos de la rueda(7 -> -8)  
   Bit 4 botón de la rueda
+
   Bit 4, botón de la rueda
   Bit 6 and 5 botones adicionales
+
   Bit 6 y 5, botones adicionales
   Bit 7 botón secundario
+
   Bit 7, botón secundario
       Estado de los botones: 0 inactivo, 1 pulsado
+
       Estado de los botones: 0 reposo, 1 pulsado. Si existe un tercer botón es asignado al bit 4.
 
|
 
|
 
|}
 
|}
  
====Examples====
+
====Ejemplos====
 +
[https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=14678 download]
  
 
  100 PROGRAM "ms_test.bas"
 
  100 PROGRAM "ms_test.bas"
Line 305: Line 388:
 
  All these values double when in lores.
 
  All these values double when in lores.
  
Now you must add the MOUSE_POS routine. It asks the mouse position to the driver. Select one of the two following ways:
+
Ahora debe agregar la rutina MOUSE_POS que pide la posición del puntero al controlador. Seleccione una de las dos formas siguientes:
  
Reading the pointer co-ordinates by reading from Mouse channel.
+
Lectura de las coordenadas del puntero mediante la lectura del canal del ratón..
  
 
  DEF MOUSE_POS
 
  DEF MOUSE_POS
Line 319: Line 402:
 
  END DEF
 
  END DEF
  
Reading the pointer co-ordinates from the system variables.
+
Lectura de las coordenadas del puntero mediante las variables de Sistema.
  
 
  DEF MOUSE_POS
 
  DEF MOUSE_POS
Line 333: Line 416:
 
  END DEF
 
  END DEF
  
You can also command the driver to put the pointer where you want:
+
También se puede ordenar al controlador donde debe dibujar el puntero:
  
Setting the Mouse co-ordinates by the system variables.
+
Ajuste de las coordenadas del puntero mediante las variables del sistema.
  
 
  DEF POS_MOUSE
 
  DEF POS_MOUSE
Line 351: Line 434:
  
  
This program is a very simple art program; simply drawing a line to
+
Este es un programa de dibujo muy sencillo, simplemente dibuja
follow the movement of the mouse when the "Mouse Button" is
+
una línea que sigue el movimiento del ratón cuando el botón
pressed. A call is made to MOUSE_POS on line 150, depending on
+
principal del ratón es pulsado. Se hace una llamada a MOUSE_POS
how you want to read it you should add into the program the
+
en la línea 150, y en función de cómo se quiere leer se debe añadir
appropriate procedure from the two listed. There is another
+
en el programa la rutina adecuada de los dos de la lista.  
procedure listed, that routine enables you to set the position of the
 
pointer. Simply call it with the desired position in variables X. and Y,
 
experiment with the different routines, and try and add them into
 
your own programs, it won't take long to get the feel of them and
 
after a very short while you will discover just how easy it is to
 
incorporate the mouse into existing programs and to write mouse
 
specific programs.
 
  
====How to use the wheel and the spare buttons in your programs====
+
También se muestra otra rutina que permite establecer la posición
 +
del puntero. Simplemente llame con la posición deseada en las
 +
variables X e Y.
  
To manage bits in Enterprise Basic is slow and difficult. The System Variable 190 has a lot of information in it but it's not easy to extract. You can use this machine code routine inside a Basic program to explode it in five bytes. In addition this MC routine will put to zero the Z_COUNTER every time it's executed:
+
Experimente con las diferentes rutinas, y trate de agregarlas en
 +
sus propios programas. No pasará mucho tiempo hasta que se
 +
acostumbre, y después de poco tiempo descubrirá lo fácil que es
 +
incorporar el ratón en los programas existentes o escribir
 +
programas específicos para ratón.
  
  100 ALLOCATE 42
+
====Como usar la rueda y los botones adicionales en tus programas====
 +
 
 +
Manejar datos binarios(bits) en el Basic del Enterprise es lento y difícil. La Variable del Sistema 190 contiene mucha información que no es fácil de extraer:
 +
 
 +
  100 GRAPHICS
 +
110 SET 180,101
 +
120 SET 183,255
 +
130 OPEN #1:"MOUSE:"
 +
140 ASK 188 A
 +
150 ASK 190 B
 +
160 IF (A) THEN PRINT "Main button"
 +
170 IF (B BAND 128) THEN PRINT "Secondary button"
 +
180 IF (B BAND 16) THEN PRINT "Central button"
 +
190 IF (B BAND 32) THEN PRINT "Fourth button"
 +
200 IF (B BAND 64) THEN PRINT "Fifth button"
 +
210 LET B=(B BAND 15)
 +
220 IF (B BAND 8) THEN LET B=B-16
 +
230 PRINT "Wheel: ";B
 +
240 GOTO 140
 +
 
 +
Pero puedes usar esta rutina de código maquina dentro de tus programas para separar la información en cinco octetos(bytes). Además esta rutina pondrá a cero el contador de impulsos de la rueda(Z_COUNTER) cada vez que sea ejecutada:
 +
 
 +
100 PROGRAM "EXPLOD.BAS"
 +
105 ALLOCATE 42
 
  110 CODE XPLOD=HEX$("18,05,00,00,00,00,00,23,06,
 
  110 CODE XPLOD=HEX$("18,05,00,00,00,00,00,23,06,
 
  00,0E,BE,F7,10,FE,00,C0,7A,06,04,23,36,00,17,CB,
 
  00,0E,BE,F7,10,FE,00,C0,7A,06,04,23,36,00,17,CB,
Line 386: Line 491:
 
   
 
   
  
Here is the disassembly of the machine code routine:
+
Aquí está la rutina en código maquina desensamblada:
  
 
  ORG: jr CODE  ;hl contains the ORG address
 
  ORG: jr CODE  ;hl contains the ORG address
Line 425: Line 530:
 
   
 
   
  
This is an explanation of the procedure to program the wheel:
+
Esta es la explicación del procedimiento para programar la rueda:
  
Low nibble of System variable 190 holds the count of impulses received from the wheel since the last time it was reset. The impulses are positive or negative, the driver adds or subtracts them to the counter, that can hold a value from 7 to -8. The program has to provide a timer routine to check the  counter(with XPLOD) every given period. Once checked, the counter is reset to 0(also by the XPLOD routine), an the value found(XPLOD+6) can be used for a task, for example to scroll the screen.
+
El semi-octeto(nibble) inferior de la variable de Sistema 190 almacena la cuenta de impulsos recibidos desde la rueda del ratón desde la última vez que fue puesto a cero. Los impulsos son positivos o negativos, el controlador los suma o resta al contador, que puede guardar un valor desde 7 hasta -8. El programa debe estar provisto de una rutina de repetición que compruebe el contador cada cierto tiempo(fácilmente con la rutina XPLOD). Una vez leído el valor, el contador ha de ser puesto a cero para esperar al siguiente ciclo(también con la rutina XPLOD). El valor encontrado(en la dirección XPLOD+6) puede entonces ser usado para realizar una tarea dentro del programa, por ejemplo deslizar el contenido de la pantalla arriba y abajo.
  
Observe that the secondary mouse button is a "wired" one, and so can also be read directly from the keyboard matrix(with the routine described on the "Reading the joystick interface" section) or easier comparing the value of var 190 with 127(the secondary button is the 7 bit):
+
Observa que el botón secundario del ratón es "cableado", al contrario que los otros botones, que son "transmitidos". Por eso el botón secundario puede ser leído directamente desde la matriz del teclado(con la rutina en código máquina descrita en la sección "Leyendo datos del interfaz joystick" o mas fácil, comparando el valor de la variable 190 con 127(El botón secundario está en el bit 7):
  
 
  ASK 190 SECBUTT
 
  ASK 190 SECBUTT
  IF SECBUTT>127 THEN GOTO MENU !secondary mouse button pressed!!!
+
  IF SECBUTT>127 THEN GOTO MENU !Botón secundario pulsado!!!
 +
 
 +
===Información técnica sobre el controlador===
  
===Driver technical information===
+
Ejecutando el comando :HELP en EXOS mostrará la versión del controlador en la lista de todas las extensiones.
  
Executing the HELP command in EXOS you can see the version of the driver in a list that shows all the extensions.
+
Si se ejecuta :MOUSE se mostrará solo la versión del controlador y la forma de control que está activa en la variable de sistema 189.
  
By now the driver only works on graphic modes but it is planned to implement some form of pointer on text mode. Once achieved it will be easy to use the mouse for example on the Basic editor, WP or EXDOS.  
+
Además, si Entermice está conectado y funcionando, se mostrará información sobre el interfaz.
  
 +
Por ahora el controlador solo funciona en modos gráficos, pero se planea implementar también alguna forma de puntero en los modos de texto. Una vez conseguido será fácil usar el ratón, por ejemplo, en el editor de Basic, en WP o en EXDOS.
  
====Values for EXOS variable 183 to change mouse pointer colour====  
+
 
 +
====Valores posibles de la variable EXOS 183 para cambiar el color del puntero====  
  
 
{|class="wikitable"
 
{|class="wikitable"
!rowspan=2|SETTING
+
!rowspan=2|VALOR
!colspan=2|RESULTANT
+
!colspan=2|RESULTADO
 
|-
 
|-
!INK
+
!TINTA
!COLOUR
+
!COLOR
 
|-
 
|-
|rowspan=2 style="text-align:center"|2 COLOUR MODE
+
|rowspan=2 style="text-align:center"|MODO 2 COLORES
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|-
 
|-
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|1  
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|1  
 
|-  
 
|-  
|rowspan=4 style="text-align:center"|4 COLOUR MODE
+
|rowspan=4 style="text-align:center"|MODO 4 COLORES
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|-
 
|-
Line 464: Line 573:
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|3
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|3
 
|-
 
|-
|rowspan=16 style="text-align:center"|16 COLOUR MODE
+
|rowspan=16 style="text-align:center"|MODO 16 COLORES
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|style="text-align:right; background-color: #000; color: #fff"|'''0'''||style="text-align:right"|0
 
|-
 
|-
Line 497: Line 606:
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|15
 
|style="text-align:right; background-color: #fff; color: #000"|'''255'''||style="text-align:right"|15
 
|-
 
|-
|style="text-align:center"|255 COLOUR MODE||style="text-align:right; font-weight: bold"|[http://ep.lgb.hu/colors.html 0-255]||style="text-align:right"|0-255
+
|style="text-align:center"|MODO 256 COLORES||style="text-align:right; font-weight: bold"|[http://ep.lgb.hu/colors.html 0-255]||style="text-align:right"|0-255
 
|}
 
|}
  
====Joystick mode of the EnterMice mouse interface====
+
====Modo joystick del interfaz de ratón EnterMice====
  
  
A mouse plugged on the EnterMice PS/2 port is not just restricted to acting as a mouse, it can
+
Un ratón conectado en el puerto PS/2 del Entermice no solo puede usarse como ratón, puede también simular un joystick. Para activar ese modo han de ponerse en OFF los dos micro-interruptores DS1 y DS2. El interfaz entonces convertirá el movimiento del ratón en el puerto PS/2 a pulsaciones de joystick en el puerto Joy 1. Ni siquiera hay que desconectar un joystick conectado allí, pues ese puerto será desactivado. El ratón mandará movimiento tal como un joystick, lo que será útil para manejar juegos o programas antiguos.
be made to simulate a joystick. To activate this mode you must put to OFF both DS1 and DS2 switches. The interface then will convert the mouse movement on the PS/2 connector to joystick movement on Joy 1 port. You don't have to unplug your real joystick from that port as it will be disabled. The mouse will then send movement like that of a joystick, useful to manage old programs or games.
 
  
If DS3 is ON, in joystick mode lights up red LED. It's blinking when any direction-contact is shorted.
+
Siempre que DS3 esté en ON, El modo joystick encenderá el LED rojo, que parpadeará si algún contacto de dirección es pulsado por la emulación.
  
NOTE: The fire button is the left hand button on the mouse. To make use of the right hand button
+
NOTA: El botón de disparo será el pulsador izquierdo del ratón. Para hacer uso del pulsador derecho del ratón se debe usar la rutina descrita en la sección "Leyendo datos del interfaz joystick".
use the routines shown in the section on the mouse interface.
 
  
====The joystick ports====
+
====Los puertos de joystick====
  
The EnterMice mouse interface will not only work as a mouse interface but as an intelligent joystick interface. Any ATARI-Kempston-Amiga style joystick can then be inserted into one of the two 9 pin connectors at the back of the interface board. If the joystick has an autofire option it will work. Mouse and joysticks can stay connected at the same time as they don't interfere one to the others.
+
EnterMice puede no solo funcionar como un interfaz de ratón, sino además como un interfaz inteligente de joystick. Cualquier joystick tipo ATARI-Kempston-Amiga puede ser enchufado en uno de los dos conectores de 9 pines de la parte trasera de la tarjeta. Si el joystick esta provisto de opción auto-disparo también funcionará. El ratón y los joystick pueden estar conectados al mismo tiempo, pues no interfieren entre si.
  
====Reading the joystick interface====
+
====Leyendo datos del interfaz joystick====
  
  
Originally the control ports of the Enterprise only had 1 FIRE button, but now the EnterMice interface provides two more on both ports. Obviously, they will not work on old games, only on new releases or new conversions of games.  
+
Originalmente los puertos de control del Enterprise solo tenían un botón de disparo, pero ahora el Entermice dispone de otros dos en cada uno de los puertos. Obviamente, no funcionarán en juegos o programas antiguos, solo en lanzamientos nuevos o nuevas conversiones de juegos.  
  
All normal methods of reading the two ports work. The only extra code required is to read the extra fire buttons. An example of the code is listed below.
+
Todos los métodos normales de leer los dos puertos funcionarán. Lo único que necesitará programación adicional serán los botones de disparo extra. A continuación se muestra una rutina de ejemplo.
  
  
Line 533: Line 640:
  
  
This is the disassembly of that little code:
+
Esta es la rutina en código máquina desensamblada:
  
  
Line 548: Line 655:
 
                           c9              ret
 
                           c9              ret
  
You can read the three Fire buttons of the two joystick ports of EnterMice changing in the Basic  line "140 LET FIRE2=USR(FIRE,4)", the "4" by a "1" or a "2".(H=0) For the second port you must use "1281","1282" or "1284".(H=5)
+
Puedes leer los tres botones de fuego del primer joystick cambiando en la linea de Basic  "140 LET FIRE2=USR(FIRE,4)", el "4" por un "1" o un "2".(registro H=0) Para el segundo puerto debes usar "1281","1282" or "1284".(H=5)
  
This method also can be utilised to read the two main mouse buttons, that are shared with the FIREs of control 1.
+
Este método puede ser utilizado además para leer los dos botones principales del ratón, pues son compartidos con los botones de disparo del puerto 1.
  
==Troubleshooting==
+
==Solución de problemas==
===Keyboard issue===
+
===Problemas con el teclado===
[[File:KbdIssue1.jpg|thumb|200px|Figure 1]]
+
[[File:KbdIssue1.jpg|thumb|200px|Figura 1]]
[[File:KbdIssue2.jpg|thumb|200px|Figure 2]]
+
[[File:KbdIssue2.jpg|thumb|200px|Figura 2]]
[[File:KbdIssue3.jpg|thumb|200px|Figure 3]]
+
[[File:KbdIssue3.jpg|thumb|200px|Figura 3]]
[[File:KbdFixer.jpg|thumb|200px|Keyboard fixer (visualisation)]]
+
Durante la creación del Entermice se descubrió un error bastante serio en el diseño del Enterprise.
During the creation of the EnterMice, a fairly serious error in the design of the Enterprise was casually discovered.
 
  
It stays totally unnoticed if nothing is connected to the ports Control 1 and Control 2. However, the EnterMice uses them...
+
No se nota cuando no hay nada conectado a los puertos de control 1 o 2. Pero por supuesto, EnterMice los usa...
  
The issue is about interferences on KB0..KB9 ports from keyboard, that are also utilised by the control ports.
+
Este problema provoca interferencias en la matriz del teclado, que también es usada para los puertos de control.
  
If only one key is pressed at the keyboard, then nothing wrong happens (see figure 1).
+
Si solo se pulsa un botón en el teclado no hay inconvenientes(ver figura 1).
  
However, if you press two keys in the same column simultaneously, the signal from the selected line will be transferred to the line of the second key as well (figure 2).
+
Pero, si se pulsan dos teclas de la misma columna al mismo tiempo, la señal de la primera tecla colisiona con la señal de la segunda(figura 2).
  
The Enterprise lacks blocking return diodes to separate the rows of the keyboard!
+
¡El Enterprise no lleva diodos anti-retorno que separen las filas de la matriz del teclado!
  
Electrically nothing will happen (the LS145 decoder inside the computer has open collector outputs), but reading from the external ports Control 1 and Control 2 causes errors.
+
Eléctricamente no hay peligro de cortocircuitos (el decodificador LS145 dentro del ordenador esta protegido con resistencias en colector abierto), pero las pulsaciones en el teclado pueden provocar lecturas fantasma al explorar el estado de los puertos de control externos.
  
In order to eliminate the cause, diodes should be added to each row of keys on the Enterprise, to avoid that pressing more than one key it can cause "collisions" (figure 3).
+
La forma de solucionar el problema es añadir diodos a cada una de las filas del teclado del Enterprise, para evitar que se crucen las señales al pulsar dos o mas teclas (figura 3).
  
Pear has prepared a draft of a PCB to fix it, but it has not been tested yet. In the meanwhile, in order to avoid errors, the keyboard should not be operated while joysticks or mouse are in use.
+
Pear ha preparado un adaptador que soluciona el problema. Si no se ha instalado aun el adaptador, con el fin de evitar errores, no se debe accionar el teclado mientras se usa el ratón o los joysticks.
  
===Microsoft Optical Mouse===
+
[[File:KbdFixer.jpg|200px|Solución para el teclado (recreación)]]
The PS/2 Microsoft Optical Mouse is a special case. It should be only connected inserted on its original Microsoft USB to PS/2 converter. It will work with EnterMice if connected before power on, but in this particular case, you can not use the hot-plug feature as it will be not recognised.
+
[[File:KbdFixerView.jpg|300px|Keyboard fixer]]
 +
[[File:KbdFixerInside.jpg|300px|Keyboard fixer inside the Enterprise]]
 +
[[File:KbdFixerConnected.jpg|300px|Keyboard connected via fixer]]
  
EnterMice can be forced to recognise the Microsoft mouse during operation, you only need to momentarily short the RESET pin-header on the interface or press RESET button on newer board version (it resets only the interface, not the computer).
+
===Ratón Óptico Microsoft===
 +
El Ratón Óptico Microsoft PS/2 es un caso especial de ratón. Solo debe ser usado en el Entermice insertado en su adaptador USB a PS/2 original de Microsoft. Funcionará si se le conecta antes de encender la fuente de alimentación, pero en este caso particular no será reconocido si se conecta "en caliente".
  
==Technical specification==
+
EnterMice puede ser forzado a reconocer el ratón Microsoft mientras el Enterprise está encendido, solo hay que juntar los contactos de RESET del interfaz, o pulsar el botón de RESET en las nuevas versiones del interfaz (solo se re-inicializará el interfaz, no el ordenador).
===Joystick port pinout===
+
 
 +
==Especificaciones Tecnicas==
 +
===Patillaje de los conectores de joystick===
 
{|class="wikitable"
 
{|class="wikitable"
!pin
+
!patilla
!signal
+
!señal
 
|-
 
|-
|style="text-align:center"|1||style="text-align:center; width: 100px"|Up
+
|style="text-align:center"|1||style="text-align:center; width: 100px"|Arriba
 
|-
 
|-
|style="text-align:center"|2||style="text-align:center"|Down
+
|style="text-align:center"|2||style="text-align:center"|Abajo
 
|-
 
|-
|style="text-align:center"|3||style="text-align:center"|Left
+
|style="text-align:center"|3||style="text-align:center"|Izquierda
 
|-
 
|-
|style="text-align:center"|4||style="text-align:center"|Right
+
|style="text-align:center"|4||style="text-align:center"|Derecho
 
|-
 
|-
|style="text-align:center"|5||style="text-align:center"|Fire 3
+
|style="text-align:center"|5||style="text-align:center"|Disparo 3
 
|-
 
|-
|style="text-align:center"|6||style="text-align:center"|Fire 1
+
|style="text-align:center"|6||style="text-align:center"|Disparo 1
 
|-
 
|-
 
|style="text-align:center"|7||style="text-align:center"|+5 V
 
|style="text-align:center"|7||style="text-align:center"|+5 V
 
|-
 
|-
|style="text-align:center"|8||style="text-align:center"|GND
+
|style="text-align:center"|8||style="text-align:center"|Masa
 
|-
 
|-
|style="text-align:center"|9||style="text-align:center"|Fire 2
+
|style="text-align:center"|9||style="text-align:center"|Disparo 2
 
|}
 
|}
===Control Map===
+
 
 +
===Mapa de Control===
 
{|class="wikitable"
 
{|class="wikitable"
 
!colspan=2 rowspan=2|
 
!colspan=2 rowspan=2|
!colspan=2|J column (bit 0)
+
!colspan=2|columna J (bit 0)
!colspan=2|K column (bit 1)
+
!colspan=2|columna K (bit 1)
!colspan=2|L column (bit 2)
+
!colspan=2|columna L (bit 2)
 
|-
 
|-
 
!JM=0*
 
!JM=0*
Line 620: Line 732:
 
|-
 
|-
 
|rowspan=5|Control 1
 
|rowspan=5|Control 1
|Row 0 Fire||style="text-align:center"|Joy 1 Fire 1||Mice Left Btn
+
|Fila 0 disparo||style="text-align:center"|Joy 1 Disp 1||Ratón Btn Izq
|Mice Left Btn or Joy 1 Fire 2*||Joy 1 Fire 2
+
|Ratón Btn Izq o Joy 1 Disp 2*||Joy 1 Disp
|colspan=2|Mice Right Btn or Joy 1 Fire 3*
+
|colspan=2|Ratón Btn Der o Disp 3 Joy 1*
 
|-
 
|-
|Row 1 Up||style="text-align:center"|Joy 1 Up||style="text-align:center"|Mice D0
+
|Fila 1 Arriba||style="text-align:center"|Joy 1 Arriba||style="text-align:center"|Ratón D0
|style="text-align:center"|Mice D0||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Ratón D0||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 2 Down||style="text-align:center"|Joy 1 Down||style="text-align:center"|Mice D1
+
|Fila 2 Abajo||style="text-align:center"|Joy 1 Abajo||style="text-align:center"|Ratón D1
|style="text-align:center"|Mice D1||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Ratón D1||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 3 Left||style="text-align:center"|Joy 1 Left||style="text-align:center"|Mice D2
+
|Fila 3 Izquierda||style="text-align:center"|Joy 1 Izquierda||style="text-align:center"|Ratón D2
|style="text-align:center"|Mice D2||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Ratón D2||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 4 Right||style="text-align:center"|Joy 1 Right||style="text-align:center"|Mice D3
+
|Fila 4 Derecha||style="text-align:center"|Joy 1 Derecha||style="text-align:center"|Ratón D3
|style="text-align:center"|Mice D3||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Ratón D3||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
 
|rowspan=5|Control 2
 
|rowspan=5|Control 2
|Row 5 Fire||colspan=2 style="text-align:center"|Joy 2 Fire 1||colspan=2 style="text-align:center"|Joy 2 Fire 2||colspan=2 style="text-align:center"|Joy 2 Fire 3
+
|Fila 5 Fuego||colspan=2 style="text-align:center"|Joy 2 Fuego 1||colspan=2 style="text-align:center"|Joy 2 Fuego 2||colspan=2 style="text-align:center"|Joy 2 Fuego 3
 
|-
 
|-
|Row 6 Up||colspan=2 style="text-align:center"|Joy 2 Up||style="text-align:center; background-color: #cccccc"|spare
+
|Fila 6 Arriba||colspan=2 style="text-align:center"|Joy 2 Arriba||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 7 Down||colspan=2 style="text-align:center"|Joy 2 Down||style="text-align:center; background-color: #cccccc"|spare
+
|Fila 7 Abajo||colspan=2 style="text-align:center"|Joy 2 Abajo||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 8 Left||colspan=2 style="text-align:center"|Joy 2 Left||style="text-align:center; background-color: #cccccc"|spare
+
|Fila 8 Izquierda||colspan=2 style="text-align:center"|Joy 2 Izquierda||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|-
 
|-
|Row 9 Right||colspan=2 style="text-align:center"|Joy 2 Right||style="text-align:center; background-color: #cccccc"|spare
+
|Fila 9 Derecha||colspan=2 style="text-align:center"|Joy 2 Derecha||style="text-align:center; background-color: #cccccc"|libre
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre||style="text-align:center; background-color: #cccccc"|libre
 
|}
 
|}
  * Mouse buttons have higher priority
+
  * Los botones del ratón tienen alta prioridad
  * JM=0 (DS1 ON)  native EnterMice mouse mode
+
  * JM=0 (DS1 ON)  Modo Entermice nativo
   JM=1 (DS1 OFF) joystick emulation & BoxSoft compatible mode
+
   JM=1 (DS1 OFF) Emulación de joystick y modo compatible BoxSoft
  
===Sega Twister===
+
===Como conectar otros dispositivos a EnterMice===
[[File:EM_SegaExt.png|thumb|200px|Diagram]]
+
 
[[File:adapter.jpg|thumb|200px|Prototype]]
+
====Sega Twister====
[[File:em_adapter.jpg|thumb|200px|EnterMice with adapter]]
+
[[File:EM_SegaExt.png|thumb|200px|Sega Twister diagrama]]
to connect the Sega six-button pad
+
[[File:adapter.jpg|thumb|200px|Prototipo]]
 +
[[File:em_sega_mod.png|thumb|200px|Modificación en Entermice]]
 +
[[File:em_adapter.jpg|thumb|200px|EnterMice con el adaptador]]
 +
Como conectar un mando Sega de seis botones
 
[https://enterpriseforever.com/hardware/entermice-joy-ps2-mouse-interface/?action=dlattach;attach=14081;image]
 
[https://enterpriseforever.com/hardware/entermice-joy-ps2-mouse-interface/?action=dlattach;attach=14081;image]
  
[https://www.cs.cmu.edu/~chuck/infopg/segasix.txt Sega Six Button Controller Hardware Info]
+
[https://www.cs.cmu.edu/~chuck/infopg/segasix.txt Información sobre la electrónica de un mando Sega de seis botones]
  
[https://applause.elfmimi.jp/md6bpad-e.html Interface Protocol of SEGA MegaDrive's 6-Button-Controller]
+
[https://applause.elfmimi.jp/md6bpad-e.html Protocolo para explorar un mando de SEGA MegaDrive's con 6 botones]
  
 
{|class="wikitable"
 
{|class="wikitable"
|+Sega pad pinout
+
|+Patillaje de un mando Sega
 
!pin
 
!pin
!Select = Low
+
!Select = Bajo
!Select = High
+
!Select = Alto
!Select = pulse-3
+
!Select = pulso-3
 
|-
 
|-
|style="text-align:center"|1||style="text-align:center"|Up||style="text-align:center"|Up||style="text-align:center"|Button Z
+
|style="text-align:center"|1||style="text-align:center"|Arriba||style="text-align:center"|Arriba||style="text-align:center"|Botón Z
 
|-
 
|-
|style="text-align:center"|2||style="text-align:center"|Down||style="text-align:center"|Down||style="text-align:center"|Button Y
+
|style="text-align:center"|2||style="text-align:center"|Abajo||style="text-align:center"|Abajo||style="text-align:center"|Botón Y
 
|-
 
|-
|style="text-align:center"|3||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"|Left||style="text-align:center"|Button X
+
|style="text-align:center"|3||style="text-align:center; background-color: #cccccc"|MASA||style="text-align:center"|Izquierda||style="text-align:center"|Botón X
 
|-
 
|-
|style="text-align:center"|4||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"|Right||style="text-align:center; background-color: #cccccc"|not used
+
|style="text-align:center"|4||style="text-align:center; background-color: #cccccc"|MASA||style="text-align:center"|Derecha||style="text-align:center; background-color: #cccccc"|no usado
 
|-
 
|-
 
|style="text-align:center"|5||colspan=3 style="text-align:center"|+5V
 
|style="text-align:center"|5||colspan=3 style="text-align:center"|+5V
 
|-
 
|-
|style="text-align:center"|6||style="text-align:center"|Button A||style="text-align:center"|Button B||style="text-align:center; background-color: #cccccc"|not used
+
|style="text-align:center"|6||style="text-align:center"|Botón A||style="text-align:center"|Botón B||style="text-align:center; background-color: #cccccc"|no usado
 +
|-
 +
|style="text-align:center"|7||colspan=3 style="text-align:center"|Seleccionar
 +
|-
 +
|style="text-align:center"|8||colspan=3 style="text-align:center"|MASA
 +
|-
 +
|style="text-align:center"|9||style="text-align:center"|Start||style="text-align:center"|Botón C||style="text-align:center; background-color: #cccccc"|no usado
 +
|}
 +
 
 +
====Ratón Neos====
 +
[[File:EM_NeosExt.png|thumb|200px|Neos Twister diagrama]]
 +
{|class="wikitable"
 +
|+Patillaje del ratón Neos
 +
!Patilla
 +
!Función
 +
|-
 +
|style="text-align:center"|1||style="text-align:center"|Arriba
 +
|-
 +
|style="text-align:center"|2||style="text-align:center"|Abajo
 +
|-
 +
|style="text-align:center"|3||style="text-align:center"|Izquierda
 +
|-
 +
|style="text-align:center"|4||style="text-align:center"|Derecha
 +
|-
 +
|style="text-align:center"|5||style="text-align:center"|No conectado
 +
|-
 +
|style="text-align:center"|6||style="text-align:center"|/Selección-Int. Izq.
 +
|-
 +
|style="text-align:center"|7||style="text-align:center"|+5V
 +
|-
 +
|style="text-align:center"|8||style="text-align:center"|MASA
 +
|-
 +
|style="text-align:center"|9||style="text-align:center"|Interruptor Derecho.
 +
|}
 +
 
 +
====Ratón MSX====
 +
[[File:EM_MsxExt.png|thumb|200px|MSX Twister diagrama]]
 +
{|class="wikitable"
 +
|+Patillaje ratón MSX
 +
!pin
 +
!Función
 +
|-
 +
|style="text-align:center"|1||style="text-align:center"|Arriba
 +
|-
 +
|style="text-align:center"|2||style="text-align:center"|Abajo
 +
|-
 +
|style="text-align:center"|3||style="text-align:center"|Izquierda
 
|-
 
|-
|style="text-align:center"|7||colspan=3 style="text-align:center"|Select
+
|style="text-align:center"|4||style="text-align:center"|Derecha
 
|-
 
|-
|style="text-align:center"|8||colspan=3 style="text-align:center"|GND
+
|style="text-align:center"|5||style="text-align:center"|+5V
 
|-
 
|-
|style="text-align:center"|9||style="text-align:center"|Start||style="text-align:center"|Button C||style="text-align:center; background-color: #cccccc"|not used
+
|style="text-align:center"|6||style="text-align:center"|Interruptor Izquierdo
 +
|-
 +
|style="text-align:center"|7||style="text-align:center"|Interruptor Derecho
 +
|-
 +
|style="text-align:center"|8||style="text-align:center"|Selección
 +
|-
 +
|style="text-align:center"|9||style="text-align:center"|MASA
 
|}
 
|}
  
==Information for developers==
+
====Accesorios USB====
===EnterMice timings===
+
La corriente máxima disponible en el conector PS/2 está limitada por la eficacia de los estabilizadores internos del Enterprise.
The firmware of EnterMice is optimized for the cyclic reading with 50 Hz frequency (video IRQ).
+
En la práctica, la carga no debe superar los 300 mA.
 +
===3D housing===
 +
[http://www.redplanet.hu/ep/ep128entermicev1_v018.zip First version] (DIP switch on the component side)
 +
 
 +
[[File:ep128entermicev1.jpg|250px]]
 +
 
 +
[http://www.redplanet.hu/ep/ep128entermicev2_v018.zip Second version] (DIP switch on the side of the edge connectors)
 +
 
 +
[[File:ep128entermicev2.jpg|250px]]
 +
 
 +
==Información para desarrolladores==
 +
===Sincronismos de EnterMice===
 +
La programación dentro de EnterMice está optimizada para la lectura cíclica con una frecuencia de 50 Hz (video IRQ).
 
{|
 
{|
|Default reading cycle||style="text-align:right"|20 ms
+
|Ciclo de lectura por defecto||style="text-align:right"|20 ms
 
|-
 
|-
|Waiting time to perform self-test the PS/2 mouse (timeout)||style="text-align:right"|ca. 2000 ms
+
|Periodo de espera para auto-comprobación del ratón PS/2(timeout)||style="text-align:right"|aprox. 2000 ms
 
|-
 
|-
|Time of collecting the PS/2 mouse data||style="text-align:right"|max. 12 ms
+
|Tiempo de recogida de datos del ratón PS/2||style="text-align:right"|max. 12 ms
 
|-
 
|-
|Time from change state of RTS signal to issue data (nibble) for reading||style="text-align:right"|25 μs
+
|Intervalo desde que se cambia el estado de  la señal RTS hasta que se consigue leer un semi-octeto(nibble)||style="text-align:right"|25 μs
 
|-
 
|-
|Standby time for the next reading (counting from data issue)||style="text-align:right"|14 μs
+
|Espera hasta la siguiente lectura(contando desde que se recogió el dato)||style="text-align:right"|14 μs
 
|-
 
|-
|Time from read the last nibble of data to reset the nibble counter (timeout)*||style="text-align:right"|1500 μs
+
|Plazo de cancelación desde que se lee el último semi-octeto(nibble) hasta poner a cero la cuenta de semi-octetos(timeout)*||style="text-align:right"|1500 μs
 
|-
 
|-
|Default mouse polling time in joystick emulation mode||style="text-align:right"|30 ms
+
|Periodo de tiempo por defecto para la exploración del ratón en modo de emulación joystick||style="text-align:right"|30 ms
 
|-
 
|-
|Mouse polling time in joystick emulation mode when mouse doesn't move (minimize polling delay)||style="text-align:right"|12,5 ms
+
|En modo joystick, tiempo de exploración del ratón cuando este no se mueve (espera de exploración minimizada)||style="text-align:right"|12,5 ms
 
|}
 
|}
  * After this time starts another mouse data polling.
+
  * Después de este intervalo comienza otra recogida de datos del ratón.
  
===Data buffer===
+
===Memoria intermedia de datos(búfer)===
Data buffer in EnterMice has a size of 16 bytes.
+
El búfer de datos de EnterMice tiene un tamaño de 16 octetos.
  
Currently is used only a half. The remainder may be used in the future.
+
Actualmente solo se usa la mitad. El resto está reservado para mejoras futuras.
 
{|class="wikitable"
 
{|class="wikitable"
 
!Bits
 
!Bits
!colspan=4|High nibble
+
!colspan=4|Octeto alto
!colspan=4|Low nibble
+
!colspan=4|Octeto bajo
!rowspan=2|Content
+
!rowspan=2|Contenido
 
!rowspan=2 colspan=3|
 
!rowspan=2 colspan=3|
 
|-
 
|-
 
!scope="row"|Byte||style="width: 25px"|7||style="width: 25px"|6||style="width: 25px"|5||style="width: 25px"|4||style="width: 25px"|3||style="width: 25px"|2||style="width: 25px"|1||style="width: 25px"|0
 
!scope="row"|Byte||style="width: 25px"|7||style="width: 25px"|6||style="width: 25px"|5||style="width: 25px"|4||style="width: 25px"|3||style="width: 25px"|2||style="width: 25px"|1||style="width: 25px"|0
 
|-style="background-color: #b3d9ff"
 
|-style="background-color: #b3d9ff"
|style="text-align:right"|0||colspan=8 style="text-align:center"|X value
+
|style="text-align:right"|0||colspan=8 style="text-align:center"|Valor X
|style="text-align:center"|signed int (positive is moved left)
+
|style="text-align:center"|Entero con signo (positivo es movido hacia la izquierda)
|rowspan=2|BoxSoft protocol||rowspan=4 style="width: 30px; background-color: #80ff80"| ||rowspan=8 style="width: 30px; background-color: #ffdd99"|
+
|rowspan=2|Protocolo BoxSoft||rowspan=4 style="width: 30px; background-color: #80ff80"| ||rowspan=8 style="width: 30px; background-color: #ffdd99"|
 
|-style="background-color: #b3d9ff"
 
|-style="background-color: #b3d9ff"
|style="text-align:right"|1||colspan=8 style="text-align:center"|Y value
+
|style="text-align:right"|1||colspan=8 style="text-align:center"|Valor Y
|style="text-align:center"|signed int (positive is moved up)
+
|style="text-align:center"|Entero con signo (positivo es movido hacia arriba)
 
|-style="background-color: #80ff80"
 
|-style="background-color: #80ff80"
|style="text-align:right"|2||style="text-align:center"|0||style="text-align:center"|0||style="text-align:center"|0||style="text-align:center"|1
+
|style="text-align:right"|2||style="text-align:center"|0||style="text-align:center"|0||style="text-align:center"|0||style="text-align:center"|1<sup> 1)</sup>
 
|style="text-align:center"|0||style="text-align:center"|Btn5||style="text-align:center"|Btn4||style="text-align:center"|Btn3
 
|style="text-align:center"|0||style="text-align:center"|Btn5||style="text-align:center"|Btn4||style="text-align:center"|Btn3
|style="text-align:center"|Protocol identification & buttons 3,4,5 state (1=pressed)
+
|style="text-align:center"|Identif. protocolo y estado botones 3,4,5 (1=pulsado)
|colspan=2 rowspan=2|Extended MSX protocol
+
|colspan=2 rowspan=2|Protocolo extendido MSX
 
|-style="background-color: #80ff80"
 
|-style="background-color: #80ff80"
|style="text-align:right"|3||colspan=4 style="text-align:center"|''Horizontal wheel''*||colspan=4 style="text-align:center"|Z value
+
|style="text-align:right"|3||colspan=4 style="text-align:center"|''Rueda Horizontal''<sup> 2)</sup>||colspan=4 style="text-align:center"|Valor Z
|style="text-align:center"|signed int (positive is wheel moved up)
+
|style="text-align:center"|Entero con signo (positivo es rueda girada arriba)
 
|-style="background-color: #ffdd99"
 
|-style="background-color: #ffdd99"
|style="text-align:right"|4||colspan=4 style="text-align:center"|ExCnt||colspan=4 style="text-align:center"|Mouse ID
+
|style="text-align:right"|4||colspan=4 style="text-align:center"|ExCnt<sup> 3)</sup>||colspan=4 style="text-align:center"|Mouse ID
|style="text-align:center"|Extra bytes available to read (include this) & PS/2 mouse ID
+
|style="text-align:center"|Cuenta de bytes a leer (incluido este) & PS/2 mouse ID
|colspan=3 rowspan=4|EnterMice extension protocol
+
|colspan=3 rowspan=4|Protocolo extendido EnterMice
 
|-style="background-color: #ffdd99"
 
|-style="background-color: #ffdd99"
|style="text-align:right"|5||colspan=4 style="text-align:center"|Hw ver. mj.||colspan=4 style="text-align:center"|Hw ver. mn.
+
|style="text-align:right"|5||colspan=4 style="text-align:center"|Hw ver. my.||colspan=4 style="text-align:center"|Hw ver. mn.
|style="text-align:center"|Hardware version (major.minor)
+
|style="text-align:center"|Versión Hardware (mayor.menor)
 
|-style="background-color: #ffdd99"
 
|-style="background-color: #ffdd99"
|style="text-align:right"|6||colspan=4 style="text-align:center"|Fw ver. mj.||colspan=4 style="text-align:center"|Fw ver. mn.
+
|style="text-align:right"|6||colspan=4 style="text-align:center"|Fw ver. my.||colspan=4 style="text-align:center"|Fw ver. mn.
|style="text-align:center"|Firmware version (major.minor)
+
|style="text-align:center"|Versión Firmware (mayor.menor)
 
|-style="background-color: #ffdd99"
 
|-style="background-color: #ffdd99"
|style="text-align:right"|7||colspan=8 style="text-align:center"|Device ID
+
|style="text-align:right"|7||colspan=8 style="text-align:center"|ID de dispositivo
|style="text-align:center"|EnterMice ID is 5Dh
+
|style="text-align:center"|EnterMice ID es 5Dh
 
|}
 
|}
* not implemented yet, now all 8 bits represents a Z value (Vertical wheel)
+
<sup> 1)</sup> Si el dispositivo sólo es compatible con el protocolo BoxSoft, el quinto nibble es siempre igual a 0000.
You do not need to read all the data from the buffer.
 
  
Reading can be interrupted at any time. There will be the timeout and interface performs another read data from mice, then once again be ready to send data.
+
<sup> 2)</sup> No implementado aun, por ahora los 8 bits representan el valor Z (Rueda Vertical).
  
Last state of RTS signal also not matter. EnterMice reacts to the change state, not on the signal level.
+
<sup> 3)</sup> Si el dispositivo no es compatible con el protocolo EnterMice, el noveno nibble es siempre igual a 0000.
  
===Mouse reading===
+
 
 +
No es necesario leer todos los datos del búfer.
 +
 
 +
La lectura puede ser interrumpida  en cualquier momento. El interfaz entonces esperará el plazo de cancelación, tras lo cual leerá datos del ratón y estará listo para empezar de nuevo a mandar datos.
 +
 
 +
El último estado de RTS tampoco importa(sí en el protocolo Neos-MSX original). EnterMice reacciona a los cambios de estado, no al nivel de la señal.
 +
 
 +
===Lectura del ratón===
 
<code>
 
<code>
 
{|
 
{|
Line 1,033: Line 1,218:
 
| ||cp 3||
 
| ||cp 3||
 
|-
 
|-
| ||jr z,L_COLUMN||
+
| ||jr z,J_COLUMN||
 
|-
 
|-
 
|K_COLUMN:|| ||
 
|K_COLUMN:|| ||
Line 1,057: Line 1,242:
 
| ||jr CONTINUE||
 
| ||jr CONTINUE||
 
|-
 
|-
|L_COLUMN:|| ||
+
|J_COLUMN:|| ||
 
|-
 
|-
 
| ||ld a,b||
 
| ||ld a,b||
Line 1,069: Line 1,254:
 
| ||;ld c,a||; this is not necessary
 
| ||;ld c,a||; this is not necessary
 
|-
 
|-
| ||rra||; data read from L column
+
| ||rra||; data read from J column
 
|-
 
|-
 
| ||rl d||
 
| ||rl d||
 
|-
 
|-
| ||djnz L_COLUMN||
+
| ||djnz J_COLUMN||
 
|-
 
|-
 
|CONTINUE:|| ||
 
|CONTINUE:|| ||
Line 1,082: Line 1,267:
 
|}
 
|}
 
</code>
 
</code>
 +
===Lectura Mínima de EnterMice, gracias a Bruce Tanner===
 +
 +
Esta rutina de solo 79 octetos es estrictamente protocolo MSX, solo lee movimiento mas los dos botones principales. Está concebida para hacer mas fáciles nuevas conversiones o adaptaciones de viejos programas o juegos. Debe ser gobernada por una interrupción de 50 hercios, y asume que X_REL y Y_REL están contiguos en la memoria.
 +
 +
<code>
 +
{|
 +
|-
 +
| ||ld hl, X_REL||;first byte, X displacement since last lecture
 +
|-
 +
| ||ld b,3||;long delay
 +
|-
 +
| ||call READ_8BIT
 +
|-
 +
| ||inc hl||;Y_REL
 +
|-
 +
| ||ld b,2||;short delay
 +
|-
 +
| ||call READ_8BIT||;leaves B=0
 +
|-
 +
| ||xor a
 +
|-
 +
| ||out (0B5h), a
 +
|-
 +
| ||in a, (0B6h)
 +
|-
 +
| ||and 6                           
 +
|-
 +
| ||xor 6
 +
|-
 +
| ||srl a||; here the status of J column is on carry, but is discarded
 +
|-
 +
| ||srl a
 +
|-
 +
| ||rl b||; K column is saved in b
 +
|-
 +
| ||ld (SECBUTT_STATUS), a||; L column is the Right Mouse Button
 +
|-
 +
| ||ld a,b
 +
|-
 +
| ||ld (MAINBUTT_STATUS), a||; K column is the Left Mouse Button
 +
|-
 +
| ||ld a, (HL)||;Y-rel
 +
|-
 +
| ||dec hl||;X-REL
 +
|-
 +
| ||or (hl)||;If a=0, no movement
 +
|-
 +
| ||ret
 +
|-
 +
| XXXXXXXXXXXXXXXX||XXXXXXXXXXXXXXXXXXXXXXXX||XXXXXXXXXXXXXXXXXXX
 +
|-
 +
| WAIT:
 +
|-
 +
| ||nop
 +
|-
 +
| ||nop
 +
|-
 +
| ||nop
 +
|-
 +
| ||dec b
 +
|-
 +
| ||jr nz, WAIT
 +
|-
 +
| ||ret
 +
|-
 +
| XXXXXXXXXXXXXXXX||XXXXXXXXXXXXXXXXXXXXXXXX||XXXXXXXXXXXXXXXXXXX
 +
|-
 +
| READ_8BIT:||ld a,2||;RTS low
 +
|-
 +
| ||out (0B7h), a
 +
|-
 +
| ||call WAIT_READ_4BIT||; read four higher bits
 +
|-
 +
| ||xor a||;RTS high
 +
|-
 +
| ||out (0B7h), a
 +
|-
 +
| ||ld b, 2||;short delay
 +
|-
 +
| WAIT_READ_4BIT:||call WAIT||;leaves B=0
 +
|-
 +
| READ_4BIT:
 +
|-
 +
| ||ld d, b||;d=0
 +
|-
 +
| ||ld b, 4
 +
|-
 +
|-
 +
| READ_LOOP:
 +
|-
 +
| ||ld a, b
 +
|-
 +
| ||out (0B5h), a
 +
|-
 +
| ||in a, (0B6h)
 +
|-
 +
| ||rra||;data is read from K column
 +
|-
 +
| ||rra
 +
|-
 +
| ||rl d
 +
|-
 +
| ||djnz READ_LOOP
 +
|-
 +
|-
 +
| ||ld a, d
 +
|-
 +
| ||rld
 +
|-
 +
| ||ret
 +
|-
 +
|}
 +
</code>
 +
===Una rutina aun mas condensada que lee Ratón+todos los botones+rueda, gracias a IstvanV===
 +
Esta rutina incluso comprueba el principio del cuadro de video(50Hz).
 +
 +
 +
<code>
 +
{|
 +
|-
 +
| ;read EnterMice mouse input, returns:
 +
|-
 +
| ;  Z flag = input is valid
 +
|-
 +
| ;  H = X_REL
 +
|-
 +
| ;  L = Y_REL
 +
|-
 +
| ;  A bits 0 and 1 = buttons 1 and 2
 +
|-
 +
| ;  D bits 0 to 2 = buttons 3 to 5
 +
|-
 +
| ;  E bits 0 to 3 = mouse wheel Y
 +
|-
 +
| MOUSEINPUT:
 +
|-
 +
| ||DI
 +
|-
 +
| VSYNCWAIT1:||IN A,(0B4H)
 +
|-
 +
| ||AND 10H
 +
|-
 +
| ||JR Z,VSYNCWAIT1
 +
|-
 +
| VSYNCWAIT2:||IN A,(0B4H)
 +
|-
 +
| ||AND 10H
 +
|-
 +
| ||JR NZ,VSYNCWAIT2
 +
|-
 +
| ||LD C,4
 +
|-
 +
| READ_LOOP_1:||LD H,L
 +
|-
 +
| ||LD L,D
 +
|-
 +
| ||LD D,E
 +
|-
 +
| ||LD E,01H
 +
|-
 +
| ||LD A,02H||;RTS low
 +
|-
 +
| READ_LOOP_2:||OUT (0B7H),A
 +
|-
 +
| ||LD B,17||;25.6 us at 10 MHz without wait states
 +
|-
 +
| M_WAIT_LOOP:||DJNZ M_WAIT_LOOP
 +
|-
 +
| ||LD B,4
 +
|-
 +
| READ_LOOP_3:||LD A,B
 +
|-
 +
| ||OUT (0B5H),A
 +
|-
 +
| ||IN A,(0B6H)
 +
|-
 +
| ||RRA||;data is read from K column
 +
|-
 +
| ||RRA
 +
|-
 +
| ||RL E
 +
|-
 +
| ||DJNZ READ_LOOP_3
 +
|-
 +
| ||LD A,B||;RTS high
 +
|-
 +
| ||JR NC,READ_LOOP_2
 +
|-
 +
| ||DEC C
 +
|-
 +
| ||JR NZ,READ_LOOP_1
 +
|-
 +
| ||OUT (0B5H),A||;A = 0
 +
|-
 +
| ||IN A,(0B6H)
 +
|-
 +
| ||CPL
 +
|-
 +
| ||AND 06H||;bit 0 = left button,
 +
|-
 +
| ||RRA||;bit 1 = right button
 +
|-
 +
| ||BIT 7,D||;bits 5 to 7 of button state must be 0
 +
|-
 +
| ||RET||;IRQ disabled, Z = mouse detected
 +
|}
 +
</code>
 +
 +
===Lectura de los botones del ratón sin ejecutar la rutina===
 +
 +
EnterMice trata los botones principales(cableados) de diferente manera que Boxsoft+Neos. En el adaptador original siempre se puede leer el estado de los dos botones tal como se hace para leer los botones de disparo de los joysticks, escribiendo un cero o un cinco en el puerto B5h del procesador  Z80, y después se lee el valor de retorno en el puerto B6h. Esto independientemente de si se llama o no a la rutina de lectura de movimiento de ratón.
 +
 +
Debido a la naturaleza programada, no cableada, del convertidor de PS/2, esto no puede hacerse directamente con EnterMice. Pero los botones en solitario pueden ser accedidos fácilmente cambiando el estado de RTS(a 0v al menos 2 μs, y entonces de nuevo a 12v antes de escribir un cero en el puerto B5h). Entonces, después de 1,5 ms, EnterMice comenzara a traducir los datos de PS/2(en el peor de los casos tardará 12 ms), poniendo en el puerto B6h los valores correctos de los botones. 
 +
 +
Ejemplo:
 +
<code>
 +
{|
 +
|-
 +
|
 +
|-
 +
| ||ld a,2
 +
|-
 +
| ||out (0B7h),a||;RTS is put low
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||CODE
 +
|-
 +
| ||xor a
 +
|-
 +
| ||out (0B7h),a||;RTS is put high again                           
 +
|-
 +
| ||out (0B5h),a||;Keyboard row 0 is requested
 +
|-
 +
| ||in a, (0B6h)||;The two mouse buttons are read on bits 1 and 2
 +
|-
 +
|}
 +
</code>
 +
 +
=Manual en otros idiomas=
 +
[[EnterMice|Inglés]]
 +
 +
[[EnterMice_(Polski)|Polaco]]
 +
 +
[[EnterMice_(Deutsch)|Alemán]]
 +
 +
[[EnterMice (Magyar)|Húngaro]]

Latest revision as of 16:16, 27 March 2019

EnterMice

Interfaz de Ratón PS/2 y Puertos de Joystick para el ordenador Enterprise 64/128

Introducción

Este sofisticado interfaz ha sido diseñado especialmente para el ordenador Enterprise 64/128.

Se ha logrado culminar tras seis meses de trabajo de un desarrollador polaco multidisciplinar conocido en importantes foros como "Pear" (a instigación del colega español GFlorez, que también fue el primer probador del EnterMice junto a Zozo, de Hungría).

El objetivo principal del adaptador es permitir el uso en el micro-ordenador Enterprise de asequibles ratones PS/2. Además, permite la conexión directa de dos joysticks de norma Atari sin adaptadores adicionales.

EnterMice se basa en soluciones utilizadas en la interfaz del ratón BoxSoft, que soporta el ratón Neos (protocolo MSX).

Uno de los modos de funcionamiento de EnterMice es totalmente compatible con la antigua interfaz de ratón BoxSoft. Otro modo de operación convierte el movimiento del ratón en pulsaciones de joystick.


Un poco de historia sobre el Enterprise y ratones

Mejorar el Enterprise128 con control por ratón no es una nueva y excéntrica idea de un grupo de frikis de los retro-ordenadores, ya estaba previsto por los diseñadores originales del EP. El problema era que la misión de implementarlo fue sub-contratada a Aztec Software Ltd, una modesta compañía inglesa que suministró un resultado decepcionante, por dos razones principales: en primer lugar, el producto era feo [1], muy lejos de las formas redondeadas del Enterprise. En segundo lugar, no era un ratón adecuado, ya que se basaba en la emulación del movimiento de joystick. También en ese momento Enterprise Computing Ltd. estaba desapareciendo.

Pero la base de usuarios en el Reino Unido se mantuvo muy activa durante los siguientes años. Entusiastas del Enterprise fundaron pequeñas compañías. Se ofrecieron nuevos productos: ampliaciones de memoria, cables adaptados, juegos, utilidades, emuladores de Spectrum, una controladora IDE, Eprom, expansiones de la placa base, módems RS232, y mas.

La empresa más activa fue Boxsoft, fundada por el desarrollador Tim Box. Boxsoft ofrecía la mayor parte de los productos enumerados anteriormente. Dentro del paquete de un programa de dibujo llamado "Paintbox" [2], se comercializaba también un adaptador [3] más un ratón Neos con su controlador incluido. El Neos, internamente [4] un ratón MSX [5], ya había sido adaptado con éxito a otros ordenadores de 8 bits, como el Commodore 64.

En ese momento sólo unos pocos ordenadores de 8 bits tenían un ratón que funcionase con alguna forma de GUI. Era muy difícil vender algo nuevo de uso desconocido y no completamente integrado en el equipo. Visto desde la perspectiva actual, la ventaja de navegar por los sistemas operativos y aplicaciones con un ratón es obvia, y se aprecia aun mas en el instante en que este deja de funcionar...


Al final, sólo se vendieron alrededor de un centenar de "Paintbox".

El programa "Paintbox" llegó a Hungría en solitario. Los húngaros compraron los ordenadores Enterprise sabiendo que procedían de Reino Unido, pero no mucho más. Cuando se vendieron todos los Enterprise128, la base de usuarios fue abandonada tal como en el país de origen. Una vez más, nuevas compañías surgieron ofreciendo nuevos productos. Entonces una empresa llamada "A Studio" comenzó a fabricar y vender los artículos Boxsoft, camuflándolos como si fuesen sus propios productos. Uno de los programas era una versión de "Paintbox" sin la opción del ratón. Todavía necesitaba el controlador, pero una versión capada. En el lado este del Telón de Acero nadie oyó nunca hablar sobre qué era un ratón Neos.

Más tarde, en Hungría, salió al mercado una tarjeta de expansión RS232 [6] para el Enterprise, fruto de la genialidad de un equipo de desarrolladores húngaros: Gyula Mészáros por el hardware, y László Haluska ( HSOFT) para la parte de software. HSOFT tomó el controlador de ratón capado de "A Studio" y lo modificó para adaptarlo a la interfaz serie para su uso con un ratón "Mouse Systems". Mas tarde suministraría un controlador integrado para el sistema operativo 2.x EPDOS.

Esto ya es historia antigua, pero en los últimos años, con la WWW, Internet y la globalización, han surgido algunos de los antiguos artefactos Boxsoft + Neos y todas las piezas del rompecabezas han empezado a encajar. Por fin, las antiguas promesas (vistas en la propaganda de Enterprise Computers Ltd.) de una verdadera interfaz de ratón para el Enterprise, empiezan a hacerse realidad.



El nuevo interfaz EnterMice que es presentado aquí se basa en el trabajo del equipo Boxsoft, pero adaptado a la actualidad y mejorado con nuevas opciones. (Es un milagro lo que Tim Box logró entonces con solo una pocas puertas lógicas y diodos[7]). En cuanto a la programación, el eficaz controlador fue creado por D. Rabson, Andrew Fitter y Andrew Richards. Con pequeñas modificaciones, es el mismo controlador que se usará con el adaptador Entermice.

El principal problema que aparece en el momento de conectar un ratón o un joystick a el Enterprise es que los conectores y sus señales están muy lejos de ser un estándar. Pequeños conectores de borde de placa que pueden ser enchufados al revés, varios comunes conectados a +5v para los botones cuando lo normal es un solo común conectado a cero voltios, falta de protección en los retornos de señal cuando dos o mas botones son pulsados, ningún modo de mandar información o estado al dispositivo, y seguramente algún problema más.

Ahora, lo que Boxsoft creó con asequibles y comunes componentes, ha sido rediseñado y mejorado con dos circuitos integrados programables y otros modernos componentes. Uno de los chips (Xilinx) está al cargo de la conversión de conectores y señales al estándar de puertos de juego Atari. El interfaz original Boxsoft solo ofrecía la conversión del primer puerto de control, que era usado para conectar el ratón Neos o un joystick tipo Atari(nunca al mismo tiempo). En el presente proyecto se pueden conectar dos joystick y eso no interfiere con el conector de Ratón.

El ratón Neos(MSX) no es muy común hoy en día, por lo que se ha incluido un conversor de protocolo de PS/2 a MSX. Lo rige un económico y sencillo Atmel AT89C4051 a 12Mhz, capaz de adaptarse a la frecuencia del procesador Z80 instalado en el Enterprise. Con este circuito integrado y la apropiada programación en su interior, Entermice puede funcionar tanto en un EP a 4 MHz como en uno potenciado a 10 MHz, sin problemas.

También, el protocolo de lectura del ratón ha sido ampliado siguiendo el nuevo protocolo extendido de MSX lanzado por Prodatron(desarrollador de SymbOS) y NYYRIKKI(desarrollador de MSX). Ahora Entermice es capaz de mandar información de hasta cinco botones y una rueda si están presentes en el ratón.

Lista programas compatibles hasta la fecha

Multiplay, Iview, Cview, by Istvan-V.[8]+ File, by Zozosoft.[9] Internally.

File.jpg

Paintbox por medio del controlador de ratón.[10]

Paintbox.png

The Enterprise Graphical Interface por medio del controlador de ratón.[11]

EGI.JPG

SymbOS internamente, en EnterMice mode por hack[12].Por Prodatron[13].

SymbOS.png


EDC Windows, internamente en modo EnterMice y modo Hsoft driver. Usar este ejecutable modificado: [14]

Edcw.png

SPEmu128 creado por geco, el gran emulador de Spectrum para el Enterprise, ahora es capaz de emular el ratón Kempston en juegos modificados[15], desde el movimiento de ratón de EnterMice. La lista de programas compatibles crece constántemente.[16]

Moorhun.png

Lista de juegos

Pasziansz(Solitario)[17]. Versión Rom[18]

Pasziansz1.PNG

SWAP [19]

Swap.gif

Wolf2004 shoot'em up en primera persona. Convertido de ZX por Geco[20]

Wolf2004.png

Bricky Prise. Creado por Geco, Endi y Szipucsu. Adaptado a EnterMice por Isvan-V. [21] and [22]

Bricky.png

Five in a Row. Juego de estrategia programado en Basic. Adaptado a EnterMice por Lacika. [23]

Fiverow.jpg

Chess Master 2000. convertido de Amstrad por Geco.[24]

Cm2000.JPG

Puede funcionar en programas escritos en Basic, por medio del controlador de ratón

Viejos programas que usen el puerto joystick 1, con EnterMice en modo joystick.

Emuladores XEP128 y EP128emu

Incluso aunque no se posea un adaptador EnterMice, se puede experimentar como sería manejar simuladamente un Enterprise con un ratón. Ahora XEP128[25], el gran emulador creado por LGB, es capaz de simularlo desde el movimiento del ratón de un PC. Se puede incluso combinar con SPEmu128 para emular un Spectrum dentro del Enterprise emulado. El ratón Kempston obedecerá los movimientos del ratón del PC...


Aquí[26] se encuentra una explicación de como hay que organizar el emulador XEP128 para que funcione correctamente en un PC con Windows.

Y aquí[27] hay una explicación para OSX.


Gracias al trabajo de LGB en su emulador XEP128, IstvanV también ha actualizado EP128emu para que emule el interface EnterMice. Existe un instalador de Windows para mas fácil installación.

Puedes descargar la versión mas actual aquí[28].

Descripción General

Vista frontal del Entermice
Vista trasera del Entermice

Importante

¡No conectar el interfaz al ordenador cuando la fuente de alimentación esté encendida!
Una vez conectado el interfaz, si tu ordenador no arranca correctamente o si
se comporta de forma extraña, ¡debe ser apagado inmediatamente!

Comprueba que el interfaz esté conectado correctamente y prueba de nuevo.

El ratón y los joysticks pueden ser conectados y desconectados mientras el ordenador está encendido, pero no es recomendable. Es mas seguro realizar las conexiones con la fuente de alimentación apagada.

Atención: Por favor, asegúrese de leer la sección "Como conectar otros dispositivos a EnterMice" antes de conectar algún dispositivo para el cual EnterMice no haya sido diseñado.

Conectándolo al ordenador

La placa del interfaz debe ser enchufada al mismo tiempo a tres conectores de borde de placa en la parte trasera del tu Enterprise: Control 1, Control 2 y Serial/Net. Puedes apreciar que los conectores de borde de placa del interfaz están soldados en un ángulo ligeramente mayor de 90 grados. Es completamente intencionado, para asegurar que el Entermice se adapte mejor a la forma trasera del Enterprise.

Solo puede ser conectado de una forma determinada, pero puede ser que los terminales no asienten centrados en los conectores de borde de placa. Si así sucede, el contacto puede ser inestable y el ordenador y/o el interfaz pueden no funcionar.

Correctamente conectado, el interfaz funciona inmediatamente una vez que se enciende la fuente de alimentación.

Nada mas encenderse, él mismo se hace una auto-comprobación, durante la cual ambos LEDs, rojo y verde, destellaran 3 veces (independientemente del estado del interruptor 3).

Una vez que el Entermice está conectado a el Enterprise, aunque es preferible conectar el ratón antes de encender el ordenador, el interfaz está provisto de una función de hot-plug(conectado en caliente) que reconoce cuando se ha conectado un ratón, entonces, es clasificado y puesto en marcha.

Después de la correcta inicialización,el LED verde se quedará encendido (si DS3 está ON).

Caracteristicas

El interfaz puede operar en varios modos. Para configurarlo, va provisto de una fila de cinco micro interruptores.

Los valores de configuración se pueden cambiar durante el funcionamiento de la interfaz. No es necesario reiniciar el equipo.

A continuación se muestran todas las configuraciones posibles.

DS1 DS2 Modo de funcionamiento
ON ON Modo de ratón EnterMice
OFF ON Modo de ratón compatible BoxSoft. Los dos botones principales están intercambiados. El principal ahora es el derecho.
OFF OFF Modo joystick EnterMice. El movimiento detectado en el ratón es redirigido a la entrada del puerto Joystick 1 y ese puerto es desactivado.
ON OFF No usado (de hecho EnterMice como joystick en columna KB K)

Joystick 2 nunca cambia, no importa en que selección de modo se halle el interfaz.


DS3 Estado de los LEDs
OFF Estado de LEDs desactivado
ON Estado de LEDs activado


Configuración de modo de emulación Joystick:

DS4 Sensibilidad
OFF Normal
ON Alta
DS5 Corrección diagonal
OFF Desactivada
ON Activada

La corrección diagonal mejora la precisión de la simulación de joystick en los movimientos diagonales, a expensas de un ligero descenso en la velocidad.

Uso del controlador

Aquí [29] puedes encontrar el controlador.


Las siguientes instrucciones han sido tomadas del manual original de Paintbox, corregidas y después añadidas las nuevas habilidades de EnterMice.


El ratón y como usarlo en tus programas

El uso del ratón no está restringido a programas en código máquina, se puede incorporar muy fácilmente dentro de casi cualquier programa Basic. Para ello es necesario el uso de una extensión del sistema operativo(EXOS) llamado controlador de ratón("Mouse.xr").

Este controlador de dispositivo dibujará un puntero en cualquier pantalla gráfica o de texto, y mediante el control de los movimientos del ratón el puntero se deslizará en sincronía por la pantalla. El puntero en páginas de texto trabaja internamente en coordenadas gráficas, pero solo es dibujado en casillas de caracteres, por lo que el movimiento será visto como a saltos en gestos cortos.

El controlador de ratón puede ser dirigido por medio de varios comandos y funciones, por ejemplo mostrar o no el puntero. Hay dos maneras de comunicarse con el controlador de ratón, la primera es mediante la lectura y escritura en el canal del dispositivo, la segunda es por medio de las variables del sistema.

Instalación

El controlador del ratón se puede instalar por todos los métodos es decir, desde Basic "START"(si está almacenado en un cassette) o LOAD "MOUSE.XR". También se puede cargar desde el "WP", desde EXDOS o desde cualquier otro interprete(revise el manual del lenguaje de programación para más detalles).

Una vez instalado seguirá residente hasta el siguiente restablecimiento completo o hasta apagar el ordenador.

En anteriores versiones, para que funcionase correctamente, era necesario inicializarlo con el comando EXOS ":PB". El EGI y Paintbox hacen esto internamente.

Si esta usando aún una versión anticuada del controlador, nunca ejecute dos veces el comando de inicialización, ya que el Enterprise se puede quedar colgado. Ignore el mensaje de error que saldrá. El código de error (obtenido en Basic con la función EXTYPE) es 9.000 + la página de memoria donde se ha cargado el controlador. Este comportamiento fue introducido deliberadamente por los programadores del controlador.

La versión actual se auto-inicializa sola, y no colisiona con antiguos programas que usen el comando :PB, que ha sido eliminado.

Instalar varias instancias del controlador no es perjudicial ya que el sistema siempre va a usar la última, pero es un gasto inútil de memoria.

Esta es una manera muy sencilla de detectar en Basic si el controlador ya ha sido instalado:

100 WHEN EXCEPTION USE DRIVER_LOADING
110      SET 189,4 ! intenta asignar EnterMice como modo de control. Solo posible una vez instalado el controlador.
120 END WHEN


1000 HANDLER  DRIVER_LOADING
1010      EXT "LOAD MOUSE.XR" ! El fichero ha de estar en el directorio actual, si no sucederá otro error.
1020      PRINT "Loading the Mouse Driver"
1030      SET 189,4                  ! Aquí se asume que el controlador ha sido correctamente instalado.
1040 END HANDLER

Se puede hacer mas complejo y efectivo, asignando a una variable el valor de no-instalado dentro de la subrutina "handler", cargando después el controlador en el programa principal. Así, si el fichero no es encontrado(probablemente estemos en otro directorio), el error podrá ser tratado en la misma subrutina "handler" u otra.

Es una buena práctica evitar instalar varias veces el controlador de ratón.


Ejecutando ":HELP MOUSE" en EXOS nos va a mostrar información sobre la versión del controlador y, si el Entermice está conectado, también mostrará información sobre el Interfaz.

Comunicación con el controlador de ratón

Como se ha explicado anteriormente, hay dos maneras de comunicarse con el controlador de ratón. Para demostrar los dos métodos y sus efectos, vamos a mostrar primero todos los comandos, funciones y variables que se pueden usar dentro de un programa.

Comandos imprimibles y funciones

La primera y más importante tarea es abrir el canal del ratón, es decir:OPEN £?:"MOUSE:" (siendo ? un número de canal).

Hay que tener en cuenta que un canal de ratón siempre está asociado a un canal de vídeo donde dibujar el puntero. No se puede abrir un canal de ratón sin un canal de vídeo, y si el canal de vídeo desaparece o cambia mientras está abierto el canal de ratón, este lo detectara y se desactivará a si mismo. Recuerde que el canal permanecerá abierto pero inefectivo.

Para evitar errores, si un canal de vídeo ha de ser cerrado mientras se ejecuta un programa, antes se debe cerrar el canal de ratón al que está asociado.

También, si un programa en Basic basado en ratón se detiene, siempre hay que ejecutar CLOSE £? cuando se ejecute TEXT, porque el Editor de Basic cierra automáticamente el canal de vídeo de gráficos.

Comandos ejecutados al imprimir caracteres en el canal del ratón:

O Activa el dibujo del puntero
o Desactiva el puntero
P Solicita posición X e Y

Resultados o estados obtenidos mediante la lectura de un número desde el canal del ratón:

Solo después de mandar "P":

X Byte bajo
X Byte alto
Y Byte bajo
Y Byte alto

Siempre accesible:

Fire = "1" si el botón principal se ha pulsado, "0" si no.

Variables de Sistema

Dirección Contenido Por defecto
180 Canal de vídeo donde se mostrará el puntero 101
181 Posición en la Linea de Estado donde se mostraran las coordenadas X,Y 30
182 Mostrar coordenadas: 1 si, 0 no 0
183 Color del puntero {mas información en sección de tecnología} 255
184 Byte bajo de la coordenada X
185 Byte alto de la coordenada X. Compruebe programa de demostración sobre conversión de coordenadas.
186 Byte bajo de la coordenada Y
187 Byte alto de la coordenada Y
188 Estado del botón principal: 0 reposo, 1 pulsado
189 Dispositivo de entrada:
  0 - Joystick interno         2 botones, Espacio e Intro
  1 - Control 1                3 botones,
  2 - Control 2                3 botones
  3 - Boxsoft                  de 2 a 5 botones
  4 - EnterMice (por defecto)  de 2 a 5 botones
  5 - Serial Mouse Sytems      3 botones
  6 - Serial Microsoft         2 botones
 >6 - No implementado
190 Estado del botón secundario y botones adicionales si existen, contador de impulsos de rueda si existe
  Bits 0 a 3, semi-octeto(nibble) con signo, del contador de impulsos de la rueda(7 -> -8) 
  Bit 4, botón de la rueda
  Bit 6 y 5, botones adicionales
  Bit 7, botón secundario
      Estado de los botones: 0 reposo, 1 pulsado. Si existe un tercer botón es asignado al bit 4.

Ejemplos

download

100 PROGRAM "ms_test.bas"
110 NUMERIC X,V,MAX_Y",X_COUNT,LASTX,LASTY
120 GRAPHICS
130 CALL MOUSE_SETUP
130 OPEN £1:"mouse:" ! Open a channel to the Mouse
140 DO
15D CALL MOUSE_POS
160 LOOK 1:FIRE ! Check the fire button
170 IF FIRE THEN
130 PRINT £1:"o"; ! Turn the pointer off
190 PLOT LASTX,LASTY,X,Y
200 PRINT 1:"O"; ! Turn the pointer on
210 ELSE
I10 PLOT X,Y,
230 END IF
240 LET LASTX=X:LET LASTY=Y
250 LOOP
250 END
270 DEF MOUSE_SETUP
280 LET CHAR_Y=20 ! No. of characters screen high
290 LET X_COUNT=2 ! Pixel calc no
300 SET 180,101 ! Video channel to put mouse pointer on
310 SET 181,30 ! Position of co-ordinates on status line
320 SET 182,1 ! Show co-ordinates
330 SET 183,255" ! Colour of pointer
310 LET MAX_Y=CHAR_Y*36-2 ! Convert char_y to co-ordinates
350 END DEF
-
Note X_COUNT is = to "2" in 2 colour mode "4" in 4 colour mode "8" in 16 colour mode and "16" in 255 colour mode. 
All these values double when in lores.

Ahora debe agregar la rutina MOUSE_POS que pide la posición del puntero al controlador. Seleccione una de las dos formas siguientes:

Lectura de las coordenadas del puntero mediante la lectura del canal del ratón..

DEF MOUSE_POS
 PRINT £1:"P"
 LOOK £1:XL
 LOOK £1:XH
 LOOK £1:YL
 LOOK £1:YH
 LET X=XL+256*XH
 LET Y=YL+256*YH
END DEF

Lectura de las coordenadas del puntero mediante las variables de Sistema.

DEF MOUSE_POS
 ASK 184 XL
 ASK 185 XH
 ASK 186 YL
 ASK 187 YH
 LET X1=XL+256*XH
 LET X=X1*X_COUNT
 LET Y=YL+256*YH
 LET Y=Y*2
 LET Y=MAX_Y—Y
END DEF

También se puede ordenar al controlador donde debe dibujar el puntero:

Ajuste de las coordenadas del puntero mediante las variables del sistema.

DEF POS_MOUSE
 LET X=INT(X/X_COUNT)
 LET XL=X-256*INT(X/256)
 LET XH=INT(X/256)
 LET Y=MAX_Y-Y:LET Y=INT(Y/2)
 LET YL=Y-256*INT(Y/256)
 LET LET YH=INT(Y/256)
 SET 184,XL
 SET 185,XH
 SET 186,YL
 SET 187,YH
END DEF


Este es un programa de dibujo muy sencillo, simplemente dibuja una línea que sigue el movimiento del ratón cuando el botón principal del ratón es pulsado. Se hace una llamada a MOUSE_POS en la línea 150, y en función de cómo se quiere leer se debe añadir en el programa la rutina adecuada de los dos de la lista.

También se muestra otra rutina que permite establecer la posición del puntero. Simplemente llame con la posición deseada en las variables X e Y.

Experimente con las diferentes rutinas, y trate de agregarlas en sus propios programas. No pasará mucho tiempo hasta que se acostumbre, y después de poco tiempo descubrirá lo fácil que es incorporar el ratón en los programas existentes o escribir programas específicos para ratón.

Como usar la rueda y los botones adicionales en tus programas

Manejar datos binarios(bits) en el Basic del Enterprise es lento y difícil. La Variable del Sistema 190 contiene mucha información que no es fácil de extraer:

100 GRAPHICS 
110 SET 180,101
120 SET 183,255
130 OPEN #1:"MOUSE:"
140 ASK 188 A
150 ASK 190 B
160 IF (A) THEN PRINT "Main button"
170 IF (B BAND 128) THEN PRINT "Secondary button"
180 IF (B BAND 16) THEN PRINT "Central button"
190 IF (B BAND 32) THEN PRINT "Fourth button"
200 IF (B BAND 64) THEN PRINT "Fifth button"
210 LET B=(B BAND 15)
220 IF (B BAND 8) THEN LET B=B-16
230 PRINT "Wheel: ";B
240 GOTO 140

Pero puedes usar esta rutina de código maquina dentro de tus programas para separar la información en cinco octetos(bytes). Además esta rutina pondrá a cero el contador de impulsos de la rueda(Z_COUNTER) cada vez que sea ejecutada:

100 PROGRAM "EXPLOD.BAS"
105 ALLOCATE 42
110 CODE XPLOD=HEX$("18,05,00,00,00,00,00,23,06,
00,0E,BE,F7,10,FE,00,C0,7A,06,04,23,36,00,17,CB,
16,10,F8,23,7A,36,00,ED,6F,57,06,01,0E,BE,F7,10,C9")
120 GRAPHICS
130 OPEN £1:"MOUSE:"
><><><><><><>
520 CALL USR(XPLOD,XPLOD)! We pass the XPLOD address in "hl" register pair
><><><><><><>
930 PRINT PEEK(XPLOD+2)! Secondary mouse button  \
940 PRINT PEEK(XPLOD+3)! Spare button             \
950 PRINT PEEK(XPLOD+4)! Spare button             /  0 idle, 1 pressed
960 PRINT PEEK(XPLOD+5)! Wheel button            /
970 LET B=PEEK(XPLOD+6)! Z_COUNTER(wheel)           two's complement 7 to -8
980 IF B<8 THEN PRINT B
990 IF B>7 THEN PRINT B-16

Aquí está la rutina en código maquina desensamblada:

ORG:		jr CODE  ;hl contains the ORG address
           
BUTTON2:	db 0
BUTTON3:	db 0
BUTTON4:	db 0
BUTTON5:	db 0
Z_COUNT:	db 0
            
CODE:		inc hl
		ld b,0      ; read
                ld c, 0BEh  ; 190
                rst 030h
                db 10h     ;EXOS 16, Read System Var 190
        	cp 0
         	ret nz     ; if var 190 not found, the driver has not been loaded, return to Basic
         	ld a, d    ;put the obtained value in "a" to be exploded
            
      		ld b, 4    ; we need a count of 4 for the buttons loop
LOOP:		inc hl
      		ld (hl), 0 ; we don't need old values
         	rla        ; rotate left "a" and put bit 7 on carry
      		rl (hl)	   ; put the carry bit on bit 0 of (hl)
      		djnz LOOP  
            
         	inc hl     ; we still have to extract the wheel count
         	ld a,d     ; recover original 190 variable content on "a"
      		ld (hl), 0 ; we don't need old value
      		rld        ; we are only interested on low nibble of "a"
         	ld d, a	   ; a nibble filled of zeros has come from (hl) to reset the wheel counter
                           ; on low nibble of "a" but leaving the buttons intact on high nibble
      		ld b, 1     ; now we need to write the variable 
       		ld c, 0BEh  ; 190
         	rst 030h
         	db 10h     ;EXOS 16, Write System Var 190
         	ret        ;return to Basic   

Esta es la explicación del procedimiento para programar la rueda:

El semi-octeto(nibble) inferior de la variable de Sistema 190 almacena la cuenta de impulsos recibidos desde la rueda del ratón desde la última vez que fue puesto a cero. Los impulsos son positivos o negativos, el controlador los suma o resta al contador, que puede guardar un valor desde 7 hasta -8. El programa debe estar provisto de una rutina de repetición que compruebe el contador cada cierto tiempo(fácilmente con la rutina XPLOD). Una vez leído el valor, el contador ha de ser puesto a cero para esperar al siguiente ciclo(también con la rutina XPLOD). El valor encontrado(en la dirección XPLOD+6) puede entonces ser usado para realizar una tarea dentro del programa, por ejemplo deslizar el contenido de la pantalla arriba y abajo.

Observa que el botón secundario del ratón es "cableado", al contrario que los otros botones, que son "transmitidos". Por eso el botón secundario puede ser leído directamente desde la matriz del teclado(con la rutina en código máquina descrita en la sección "Leyendo datos del interfaz joystick" o mas fácil, comparando el valor de la variable 190 con 127(El botón secundario está en el bit 7):

ASK 190 SECBUTT
IF SECBUTT>127 THEN GOTO MENU !Botón secundario pulsado!!!

Información técnica sobre el controlador

Ejecutando el comando :HELP en EXOS mostrará la versión del controlador en la lista de todas las extensiones.

Si se ejecuta :MOUSE se mostrará solo la versión del controlador y la forma de control que está activa en la variable de sistema 189.

Además, si Entermice está conectado y funcionando, se mostrará información sobre el interfaz.

Por ahora el controlador solo funciona en modos gráficos, pero se planea implementar también alguna forma de puntero en los modos de texto. Una vez conseguido será fácil usar el ratón, por ejemplo, en el editor de Basic, en WP o en EXDOS.


Valores posibles de la variable EXOS 183 para cambiar el color del puntero

VALOR RESULTADO
TINTA COLOR
MODO 2 COLORES 0 0
255 1
MODO 4 COLORES 0 0
240 1
15 2
255 3
MODO 16 COLORES 0 0
192 1
12 2
204 3
36 4
228 5
48 6
240 7
3 8
195 9
15 10
207 11
51 12
243 13
63 14
255 15
MODO 256 COLORES 0-255 0-255

Modo joystick del interfaz de ratón EnterMice

Un ratón conectado en el puerto PS/2 del Entermice no solo puede usarse como ratón, puede también simular un joystick. Para activar ese modo han de ponerse en OFF los dos micro-interruptores DS1 y DS2. El interfaz entonces convertirá el movimiento del ratón en el puerto PS/2 a pulsaciones de joystick en el puerto Joy 1. Ni siquiera hay que desconectar un joystick conectado allí, pues ese puerto será desactivado. El ratón mandará movimiento tal como un joystick, lo que será útil para manejar juegos o programas antiguos.

Siempre que DS3 esté en ON, El modo joystick encenderá el LED rojo, que parpadeará si algún contacto de dirección es pulsado por la emulación.

NOTA: El botón de disparo será el pulsador izquierdo del ratón. Para hacer uso del pulsador derecho del ratón se debe usar la rutina descrita en la sección "Leyendo datos del interfaz joystick".

Los puertos de joystick

EnterMice puede no solo funcionar como un interfaz de ratón, sino además como un interfaz inteligente de joystick. Cualquier joystick tipo ATARI-Kempston-Amiga puede ser enchufado en uno de los dos conectores de 9 pines de la parte trasera de la tarjeta. Si el joystick esta provisto de opción auto-disparo también funcionará. El ratón y los joystick pueden estar conectados al mismo tiempo, pues no interfieren entre si.

Leyendo datos del interfaz joystick

Originalmente los puertos de control del Enterprise solo tenían un botón de disparo, pero ahora el Entermice dispone de otros dos en cada uno de los puertos. Obviamente, no funcionarán en juegos o programas antiguos, solo en lanzamientos nuevos o nuevas conversiones de juegos.

Todos los métodos normales de leer los dos puertos funcionarán. Lo único que necesitará programación adicional serán los botones de disparo extra. A continuación se muestra una rutina de ejemplo.


100 PROGRAM "JOYFIRE2.BAS"
110 ALLOCATE 40
120 CODE FIRE=HEX$("7C,F3,D3,B5,DB,B6,FB,A5,28,04,21,00,00,C9,
21,01,00,C9")
130 DO
140 LET FIRE2=USR(FIRE,4)
150 IF FIRE2 THEN PRINT "FIRE I PRESSED"
160 LOOP


Esta es la rutina en código máquina desensamblada:


org:                     7c 	          ld a,h  ; h is the row, l is the column. (H*256+L)
                         f3               di
                         d3b5             out (b5h),a      
                         dbb6             in a,(b6h)      
                         fb               ei      
                         a5               and l  ; bit 0 is J column, bit 1 is K column, and bit 2 is L column.
                         2804             jr z,pressed    
                         210000           ld hl, 00h    
                         c9               ret
pressed:                 210100           ld hl,01h    
                         c9               ret

Puedes leer los tres botones de fuego del primer joystick cambiando en la linea de Basic "140 LET FIRE2=USR(FIRE,4)", el "4" por un "1" o un "2".(registro H=0) Para el segundo puerto debes usar "1281","1282" or "1284".(H=5)

Este método puede ser utilizado además para leer los dos botones principales del ratón, pues son compartidos con los botones de disparo del puerto 1.

Solución de problemas

Problemas con el teclado

Figura 1
Figura 2
Figura 3

Durante la creación del Entermice se descubrió un error bastante serio en el diseño del Enterprise.

No se nota cuando no hay nada conectado a los puertos de control 1 o 2. Pero por supuesto, EnterMice los usa...

Este problema provoca interferencias en la matriz del teclado, que también es usada para los puertos de control.

Si solo se pulsa un botón en el teclado no hay inconvenientes(ver figura 1).

Pero, si se pulsan dos teclas de la misma columna al mismo tiempo, la señal de la primera tecla colisiona con la señal de la segunda(figura 2).

¡El Enterprise no lleva diodos anti-retorno que separen las filas de la matriz del teclado!

Eléctricamente no hay peligro de cortocircuitos (el decodificador LS145 dentro del ordenador esta protegido con resistencias en colector abierto), pero las pulsaciones en el teclado pueden provocar lecturas fantasma al explorar el estado de los puertos de control externos.

La forma de solucionar el problema es añadir diodos a cada una de las filas del teclado del Enterprise, para evitar que se crucen las señales al pulsar dos o mas teclas (figura 3).

Pear ha preparado un adaptador que soluciona el problema. Si no se ha instalado aun el adaptador, con el fin de evitar errores, no se debe accionar el teclado mientras se usa el ratón o los joysticks.

Solución para el teclado (recreación) Keyboard fixer Keyboard fixer inside the Enterprise Keyboard connected via fixer

Ratón Óptico Microsoft

El Ratón Óptico Microsoft PS/2 es un caso especial de ratón. Solo debe ser usado en el Entermice insertado en su adaptador USB a PS/2 original de Microsoft. Funcionará si se le conecta antes de encender la fuente de alimentación, pero en este caso particular no será reconocido si se conecta "en caliente".

EnterMice puede ser forzado a reconocer el ratón Microsoft mientras el Enterprise está encendido, solo hay que juntar los contactos de RESET del interfaz, o pulsar el botón de RESET en las nuevas versiones del interfaz (solo se re-inicializará el interfaz, no el ordenador).

Especificaciones Tecnicas

Patillaje de los conectores de joystick

patilla señal
1 Arriba
2 Abajo
3 Izquierda
4 Derecho
5 Disparo 3
6 Disparo 1
7 +5 V
8 Masa
9 Disparo 2

Mapa de Control

columna J (bit 0) columna K (bit 1) columna L (bit 2)
JM=0* JM=1* JM=0 JM=1 JM=0 JM=1
Control 1 Fila 0 disparo Joy 1 Disp 1 Ratón Btn Izq Ratón Btn Izq o Joy 1 Disp 2* Joy 1 Disp Ratón Btn Der o Disp 3 Joy 1*
Fila 1 Arriba Joy 1 Arriba Ratón D0 Ratón D0 libre libre libre
Fila 2 Abajo Joy 1 Abajo Ratón D1 Ratón D1 libre libre libre
Fila 3 Izquierda Joy 1 Izquierda Ratón D2 Ratón D2 libre libre libre
Fila 4 Derecha Joy 1 Derecha Ratón D3 Ratón D3 libre libre libre
Control 2 Fila 5 Fuego Joy 2 Fuego 1 Joy 2 Fuego 2 Joy 2 Fuego 3
Fila 6 Arriba Joy 2 Arriba libre libre libre libre
Fila 7 Abajo Joy 2 Abajo libre libre libre libre
Fila 8 Izquierda Joy 2 Izquierda libre libre libre libre
Fila 9 Derecha Joy 2 Derecha libre libre libre libre
* Los botones del ratón tienen alta prioridad
* JM=0 (DS1 ON)  Modo Entermice nativo
  JM=1 (DS1 OFF) Emulación de joystick y modo compatible BoxSoft

Como conectar otros dispositivos a EnterMice

Sega Twister

Sega Twister diagrama
Prototipo
Modificación en Entermice
EnterMice con el adaptador

Como conectar un mando Sega de seis botones [30]

Información sobre la electrónica de un mando Sega de seis botones

Protocolo para explorar un mando de SEGA MegaDrive's con 6 botones

Patillaje de un mando Sega
pin Select = Bajo Select = Alto Select = pulso-3
1 Arriba Arriba Botón Z
2 Abajo Abajo Botón Y
3 MASA Izquierda Botón X
4 MASA Derecha no usado
5 +5V
6 Botón A Botón B no usado
7 Seleccionar
8 MASA
9 Start Botón C no usado

Ratón Neos

Neos Twister diagrama
Patillaje del ratón Neos
Patilla Función
1 Arriba
2 Abajo
3 Izquierda
4 Derecha
5 No conectado
6 /Selección-Int. Izq.
7 +5V
8 MASA
9 Interruptor Derecho.

Ratón MSX

MSX Twister diagrama
Patillaje ratón MSX
pin Función
1 Arriba
2 Abajo
3 Izquierda
4 Derecha
5 +5V
6 Interruptor Izquierdo
7 Interruptor Derecho
8 Selección
9 MASA

Accesorios USB

La corriente máxima disponible en el conector PS/2 está limitada por la eficacia de los estabilizadores internos del Enterprise. En la práctica, la carga no debe superar los 300 mA.

3D housing

First version (DIP switch on the component side)

Ep128entermicev1.jpg

Second version (DIP switch on the side of the edge connectors)

Ep128entermicev2.jpg

Información para desarrolladores

Sincronismos de EnterMice

La programación dentro de EnterMice está optimizada para la lectura cíclica con una frecuencia de 50 Hz (video IRQ).

Ciclo de lectura por defecto 20 ms
Periodo de espera para auto-comprobación del ratón PS/2(timeout) aprox. 2000 ms
Tiempo de recogida de datos del ratón PS/2 max. 12 ms
Intervalo desde que se cambia el estado de la señal RTS hasta que se consigue leer un semi-octeto(nibble) 25 μs
Espera hasta la siguiente lectura(contando desde que se recogió el dato) 14 μs
Plazo de cancelación desde que se lee el último semi-octeto(nibble) hasta poner a cero la cuenta de semi-octetos(timeout)* 1500 μs
Periodo de tiempo por defecto para la exploración del ratón en modo de emulación joystick 30 ms
En modo joystick, tiempo de exploración del ratón cuando este no se mueve (espera de exploración minimizada) 12,5 ms
*  Después de este intervalo comienza otra recogida de datos del ratón.

Memoria intermedia de datos(búfer)

El búfer de datos de EnterMice tiene un tamaño de 16 octetos.

Actualmente solo se usa la mitad. El resto está reservado para mejoras futuras.

Bits Octeto alto Octeto bajo Contenido
Byte 7 6 5 4 3 2 1 0
0 Valor X Entero con signo (positivo es movido hacia la izquierda) Protocolo BoxSoft
1 Valor Y Entero con signo (positivo es movido hacia arriba)
2 0 0 0 1 1) 0 Btn5 Btn4 Btn3 Identif. protocolo y estado botones 3,4,5 (1=pulsado) Protocolo extendido MSX
3 Rueda Horizontal 2) Valor Z Entero con signo (positivo es rueda girada arriba)
4 ExCnt 3) Mouse ID Cuenta de bytes a leer (incluido este) & PS/2 mouse ID Protocolo extendido EnterMice
5 Hw ver. my. Hw ver. mn. Versión Hardware (mayor.menor)
6 Fw ver. my. Fw ver. mn. Versión Firmware (mayor.menor)
7 ID de dispositivo EnterMice ID es 5Dh

1) Si el dispositivo sólo es compatible con el protocolo BoxSoft, el quinto nibble es siempre igual a 0000.

2) No implementado aun, por ahora los 8 bits representan el valor Z (Rueda Vertical).

3) Si el dispositivo no es compatible con el protocolo EnterMice, el noveno nibble es siempre igual a 0000.


No es necesario leer todos los datos del búfer.

La lectura puede ser interrumpida en cualquier momento. El interfaz entonces esperará el plazo de cancelación, tras lo cual leerá datos del ratón y estará listo para empezar de nuevo a mandar datos.

El último estado de RTS tampoco importa(sí en el protocolo Neos-MSX original). EnterMice reacciona a los cambios de estado, no al nivel de la señal.

Lectura del ratón

; Here begin the Neos mouse reading
ld hl,X_REL ; first byte
ld a,2 ; put RTS low, the contrary to normal MSX
out (0B7h),a
ld b,3 ; long delay. Stock was 8
call WAIT
call READ_4BIT ; read four higher bits
rld ; push them in (HL)
xor a ; put RTS high
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four lower bits
rld ; push them in (HL)
ld hl,Y_REL ; second byte
ld a,2 ; put RTS low
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four higher bits
rld ; push them in (HL)
xor a ; put RTS high
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four lower bits
rld ; push them in (HL)
;<======Here will be added the future Wheel and three spare buttons reading. SECOND TENTATIVE
ld hl,SW_Z_STATUS
ld a,2 ; put RTS low
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four higher bits
and 15
cp 1 ; IF THIS NIBBLE=0001 THEN THE MOUSE IS IN EXTENDED PROTOCOL
jr z,CONTINUE_READ
xor a ; we must leave RTS high for the next mouse reading cycle
out (0B7h),a ;IGNORE THAT NIBBLE
ld (hl),0 ; we don't need old values
jr STOP_READ
CONTINUE_READ:
xor a ; put RTS high
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four higher bits, the three lower bits are the buttons. They come ready to store
push af ; push them in stack. they are in the lower nibble.
ld a,(hl) ;
push af ;save the Z counter for later.
ld a,2 ; put RTS low
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four bits
rld ;we need z displacement in 8 bit
xor a ; put RTS high for the next mouse reading cycle
out (0B7h),a
ld b,2 ; short delay. Stock was 5
call WAIT
call READ_4BIT ; read four lower bits. Z displacement
rld ; push them in (HL) ;NOW WE HAVE Z displacement in (hl)
pop af ; restored Z counter to "a", but we have garbage on high nibble
and 00Fh
bit 3,a
jr z,SIGN_DONE
or 0F0h
SIGN_DONE: ; now we have the sign extended to 8 bits on "a"
add a,(hl)
cp 128 ; positive or negative?
jr c,POSITIVE
cp 248 ; lower than -8?
jr nc,FINISHED ;
ld a,248 ; -8 is the bottom
jr FINISHED
POSITIVE:
cp 8 ; higher than 7?
jr c,FINISHED
ld a,7 ; 7 is the top
FINISHED: ; the excess of 7 or -8 has been wiped
ld c,a ; save Z addition on c
pop af ; retrieve the buttons status. They are now on first nibble of a
rld ; buttons stored
ld a,c ; we only need the first nibble of Z counter addition
rld ; the spare buttons status and the Z counter are now in SW_Z_STATUS
STOP_READ:
xor a ; recall buttons on row 0
out (0B5h),a
in a,(0B6h) ; read Mouse buttons
and 7 ; mask
xor 7 ; flip them all as on Enterprise a pressed key is 1 and released 0
rl (hl) ; Get ready the bit 7 of "hl" register pair. Inside is SW_Z_STATUS, variable number 190
srl a ; This is the very FIRST "srl a". The button status is now in the carry flag
; secondary button of Boxsoft is read on J column. Primary button of EnterMice is read on K column
push af
ld a,(INPUT_DEVICE)
cp 3 ; Boxsoft interface mode buttons
jr nz,L_BUTTON
pop af ; We need the value of "a" and "f" registers. Carry flag still stores the value of secondary button
rr (hl) ; secondary button goes to bit 7 of SW_Z_STATUS, variable number 190
srl a ; Primary button of Boxsoft is on J column. This is the second "srl a"
JR MAIN_BUTTON
L_BUTTON: ; EnterMice interface mode buttons
pop af ; retrieve the value of register "a". "f" is disposable, soon we will load the button on carry flag
push af ; I still will need later the register "a" value
srl a ; two "srl a" because the secondary button of EnterMice is read on L column
srl a ; the proper button status is now in the carry flag
rr (hl) ; secondary button goes to bit 7 of SW_Z_STATUS, variable number 190
pop af ; retrieve the value of register "a" just after the FIRST "srl a"
MAIN_BUTTON:
and 1
ld (FIRE_STATUS),a ; EXOS Variable 188. K column if Boxsoft or L column if EnterMice
call sub_C3A6 ; this is the "corrections and drawing" routine where the "velocity" 1.1 modification was made
ld a,(X_REL)
ld c,a
ld a,(Y_REL)
or c
ret
XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX
WAIT:
nop
nop
nop
dec b
jr nz,WAIT
ret
XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX
READ_4BIT: ; I split the routine in two to not put more processor time
ld b,4
ld d,0
ld a,(INPUT_DEVICE)
cp 3
jr z,J_COLUMN
K_COLUMN:
ld a,b
;inc c ; this is not necessary
out (0B5h),a
in a,(0B6h)
;ld c,a ; this is not necessary
rra ; data read from K column
rra
rl d
djnz K_COLUMN
jr CONTINUE
J_COLUMN:
ld a,b
;inc c ; this is not necessary
out (0B5h),a
in a,(0B6h)
;ld c,a ; this is not necessary
rra ; data read from J column
rl d
djnz J_COLUMN
CONTINUE:
ld a,d
ret

Lectura Mínima de EnterMice, gracias a Bruce Tanner

Esta rutina de solo 79 octetos es estrictamente protocolo MSX, solo lee movimiento mas los dos botones principales. Está concebida para hacer mas fáciles nuevas conversiones o adaptaciones de viejos programas o juegos. Debe ser gobernada por una interrupción de 50 hercios, y asume que X_REL y Y_REL están contiguos en la memoria.

ld hl, X_REL ;first byte, X displacement since last lecture
ld b,3 ;long delay
call READ_8BIT
inc hl ;Y_REL
ld b,2 ;short delay
call READ_8BIT ;leaves B=0
xor a
out (0B5h), a
in a, (0B6h)
and 6
xor 6
srl a ; here the status of J column is on carry, but is discarded
srl a
rl b ; K column is saved in b
ld (SECBUTT_STATUS), a ; L column is the Right Mouse Button
ld a,b
ld (MAINBUTT_STATUS), a ; K column is the Left Mouse Button
ld a, (HL) ;Y-rel
dec hl ;X-REL
or (hl) ;If a=0, no movement
ret
XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX
WAIT:
nop
nop
nop
dec b
jr nz, WAIT
ret
XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX
READ_8BIT: ld a,2 ;RTS low
out (0B7h), a
call WAIT_READ_4BIT ; read four higher bits
xor a ;RTS high
out (0B7h), a
ld b, 2 ;short delay
WAIT_READ_4BIT: call WAIT ;leaves B=0
READ_4BIT:
ld d, b ;d=0
ld b, 4
READ_LOOP:
ld a, b
out (0B5h), a
in a, (0B6h)
rra ;data is read from K column
rra
rl d
djnz READ_LOOP
ld a, d
rld
ret

Una rutina aun mas condensada que lee Ratón+todos los botones+rueda, gracias a IstvanV

Esta rutina incluso comprueba el principio del cuadro de video(50Hz).


 ;read EnterMice mouse input, returns:
 ; Z flag = input is valid
 ; H = X_REL
 ; L = Y_REL
 ; A bits 0 and 1 = buttons 1 and 2
 ; D bits 0 to 2 = buttons 3 to 5
 ; E bits 0 to 3 = mouse wheel Y
MOUSEINPUT:
DI
VSYNCWAIT1: IN A,(0B4H)
AND 10H
JR Z,VSYNCWAIT1
VSYNCWAIT2: IN A,(0B4H)
AND 10H
JR NZ,VSYNCWAIT2
LD C,4
READ_LOOP_1: LD H,L
LD L,D
LD D,E
LD E,01H
LD A,02H ;RTS low
READ_LOOP_2: OUT (0B7H),A
LD B,17 ;25.6 us at 10 MHz without wait states
M_WAIT_LOOP: DJNZ M_WAIT_LOOP
LD B,4
READ_LOOP_3: LD A,B
OUT (0B5H),A
IN A,(0B6H)
RRA ;data is read from K column
RRA
RL E
DJNZ READ_LOOP_3
LD A,B ;RTS high
JR NC,READ_LOOP_2
DEC C
JR NZ,READ_LOOP_1
OUT (0B5H),A ;A = 0
IN A,(0B6H)
CPL
AND 06H ;bit 0 = left button,
RRA ;bit 1 = right button
BIT 7,D ;bits 5 to 7 of button state must be 0
RET ;IRQ disabled, Z = mouse detected

Lectura de los botones del ratón sin ejecutar la rutina

EnterMice trata los botones principales(cableados) de diferente manera que Boxsoft+Neos. En el adaptador original siempre se puede leer el estado de los dos botones tal como se hace para leer los botones de disparo de los joysticks, escribiendo un cero o un cinco en el puerto B5h del procesador Z80, y después se lee el valor de retorno en el puerto B6h. Esto independientemente de si se llama o no a la rutina de lectura de movimiento de ratón.

Debido a la naturaleza programada, no cableada, del convertidor de PS/2, esto no puede hacerse directamente con EnterMice. Pero los botones en solitario pueden ser accedidos fácilmente cambiando el estado de RTS(a 0v al menos 2 μs, y entonces de nuevo a 12v antes de escribir un cero en el puerto B5h). Entonces, después de 1,5 ms, EnterMice comenzara a traducir los datos de PS/2(en el peor de los casos tardará 12 ms), poniendo en el puerto B6h los valores correctos de los botones.

Ejemplo:

ld a,2
out (0B7h),a ;RTS is put low
CODE
CODE
CODE
CODE
CODE
CODE
CODE
xor a
out (0B7h),a ;RTS is put high again
out (0B5h),a ;Keyboard row 0 is requested
in a, (0B6h) ;The two mouse buttons are read on bits 1 and 2

Manual en otros idiomas

Inglés

Polaco

Alemán

Húngaro