Difference between revisions of "EnterMice (Deutsch)"
(→Neos Maus) |
(→USB gadgets) |
||
(81 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
Dieses komplexe Interface wurde für die Enterprise 64/128 Computer Modelle entwickelt. | Dieses komplexe Interface wurde für die Enterprise 64/128 Computer Modelle entwickelt. | ||
− | Die Fertigstellung ist der Höhepunkt von sechs Monaten Arbeit eines multidisziplinären Polnischen Entwicklers, der in einigen Foren als Pear bekannt ist (angestiftet vom spanischen Kollegen | + | Die Fertigstellung ist der Höhepunkt von sechs Monaten Arbeit eines multidisziplinären Polnischen Entwicklers, der in einigen Foren als Pear bekannt ist (angestiftet vom spanischen Kollegen GFlorez, der zusammen mit Zozo (aus Ungarn) einer der ersten Tester des EnterMice war). |
Das Hauptziel des Adapters ist es, die Verwendung von billigen und gut verfügbaren PS/2 Mäusen am Enterprise Rechner zu ermöglichen. Zusätzlich ermöglicht er den Anschluss von zwei Joysticks nach dem Atari-Standard ohne zusätzliche Adapter. | Das Hauptziel des Adapters ist es, die Verwendung von billigen und gut verfügbaren PS/2 Mäusen am Enterprise Rechner zu ermöglichen. Zusätzlich ermöglicht er den Anschluss von zwei Joysticks nach dem Atari-Standard ohne zusätzliche Adapter. | ||
Line 53: | Line 53: | ||
==Aktuelle Liste von Programmen die kompatibel mit der Maus sind== | ==Aktuelle Liste von Programmen die kompatibel mit der Maus sind== | ||
− | + | 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] | |
− | + | [[File:File.jpg]] | |
− | SymbOS intern, nur | + | Paintbox mit dem Maus-Treiber[https://enterpriseforever.com/programming/issues-on-paintbox/?action=dlattach;attach=14697] |
+ | |||
+ | [[File:Paintbox.png]] | ||
+ | |||
+ | The Enterprise Graphical Interface mit dem Maus-Treiber[https://enterpriseforever.com/other-topics/enterprise-graphical-interface/?action=dlattach;attach=14742] | ||
+ | |||
+ | [[File:EGI.JPG]] | ||
+ | |||
+ | SymbOS intern, nur im EnterMice Modus by hack[https://enterpriseforever.com/ep128emu/ep128emu/?action=dlattach;attach=16288].By Prodatron[https://enterpriseforever.com/programming/symbos-106/?action=dlattach;attach=16637]. | ||
+ | |||
+ | [[File:SymbOS.png]] | ||
Programme in Basic können mit dem Maus-Treiber arbeiten | Programme in Basic können mit dem Maus-Treiber arbeiten | ||
Line 63: | Line 73: | ||
Alte Programme die Joystick Anschluss 1 verwenden, mit EnterMice im Joystick Modus. | Alte Programme die Joystick Anschluss 1 verwenden, mit EnterMice im Joystick Modus. | ||
− | + | [http://www.ep128.hu/Ep_Util/Edcw.htm EDC Windows], internally in EnterMice mode and Hsoft driver mode. Benutzen Sie diese ausführbare Datei: [https://enterpriseforever.com/programming/entermice-option-on-edcw/?action=dlattach;attach=16307] | |
+ | |||
+ | [[File:edcw.png]] | ||
+ | |||
+ | SPEmu128 von Geco, der prima Emulator für Enterprise, kann jetzt Kempston-Maus adaptierte Spiele emulieren.[http://velesoft.speccy.cz/kmsoft.htm] von EnterMice Maus Bewegung. Die liste der kompatibeln Spiele nimmt ständig zu.[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=15834] | ||
+ | |||
+ | [[File:moorhun.png]] | ||
+ | |||
+ | ===Die Liste der Spiele=== | ||
+ | |||
+ | Patience(Solitaire)[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=16014]. Rom version[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 Ego-Shooter. ZX Konversion von Geco[https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=16889] | ||
+ | |||
+ | [[File:Wolf2004.png]] | ||
+ | |||
+ | Bricky Prise. Erstellt von Geco, Endi und Szipucsu. Adapted to EnterMice by 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. Strategiespiel in Basic geschrieben. Angepasst an EnterMice von Lacika. [https://enterpriseforever.com/programozas/basic/?action=dlattach;attach=16867] | ||
+ | |||
+ | [[File:fiverow.jpg]] | ||
+ | |||
+ | Chess Master 2000 Amstrad Konversion von Geco[https://enterpriseforever.com/letoltesek-downloads/cpc-jatekok-ep-konverzioi-games-converted-from-cpc/?action=dlattach;attach=16271] | ||
+ | |||
+ | [[File:Cm2000.JPG]] | ||
+ | |||
+ | ===XEP128 und EP128emu Emulatoren === | ||
+ | |||
+ | Auch wenn du keinen EnterMice Adapter hast, kannst du das Gefühl probieren, einen emulierten Enterprise mit Maus im PC zu benutzen. | ||
+ | LGBs tolles XEP128[http://xep128.lgb.hu/] Emulator kann ihn jetzt mit der PC Maus exakt emulieren. Sie können es sogar mit SPEmu128 kombinieren, um ein Spektrum innerhalb des emulierten Enterprise zu emulieren. Die Kempston-Maus wird Ihren PC-Mausbewegungen folgen .... | ||
+ | |||
+ | Hier[https://enterpriseforever.com/emulators/xep128-1331/msg56458/#msg56458] ist eine Erklärung, wie der XEP128 Emulator richtig auf Windows PC funktioniert. (Englisch) | ||
+ | |||
+ | And here[https://github.com/lgblgblgb/xep128/wiki/Installing] ist die Erklärung für OSX. (Englisch) | ||
+ | |||
+ | |||
+ | |||
+ | Dank der Arbeiten von LGB auf seinem XEP128 Emulator, hat IstvanV auch EP128emu für EnterMice Emulation aktualisiert. Es gibt ein Windows-Installationsprogramm für die einfache Installation. | ||
+ | |||
+ | Hier kann die akutelle Version runterladen werden[https://github.com/istvan-v/ep128emu/releases]. | ||
==Allgemeine Beschreibung== | ==Allgemeine Beschreibung== | ||
Line 158: | Line 215: | ||
==Verwendung des Treiber== | ==Verwendung des Treiber== | ||
− | Hier [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach= | + | Hier [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=16294] kannst Du den Treiber finden. |
Line 170: | Line 227: | ||
Die Verwendung der Maus ist nicht auf Programme in Maschinensprache beschränkt, sie kann auch ganz einfach in fast jedes Basic Programm eingebunden werden. Dazu ist die Verwendung einer EXOS Erweiterung namens "mouse driver" ("Mouse.xr") nötig. | Die Verwendung der Maus ist nicht auf Programme in Maschinensprache beschränkt, sie kann auch ganz einfach in fast jedes Basic Programm eingebunden werden. Dazu ist die Verwendung einer EXOS Erweiterung namens "mouse driver" ("Mouse.xr") nötig. | ||
− | + | This device driver will place a pointer on any graphic or text screen and by monitoring the movements of the mouse it will move the pointer around the screen in sync with it. The pointer on text video pages works internally on pixel coordinates, but is drawn only in character boundaries, so the movement can be shown as jerky on short distances. | |
Der Maus Treiber kann angewiesen werden verschiedene Befehle und Funktionen auszuführen - z.B. den Zeiger ein- und ausschalten. Es gibt zwei Wege mit dem Maus Treiber zu kommunizieren, wobei der erste ist, ihn zu lesen und zu schreiben und der zweite ist durch System Variablen. | Der Maus Treiber kann angewiesen werden verschiedene Befehle und Funktionen auszuführen - z.B. den Zeiger ein- und ausschalten. Es gibt zwei Wege mit dem Maus Treiber zu kommunizieren, wobei der erste ist, ihn zu lesen und zu schreiben und der zweite ist durch System Variablen. | ||
Line 189: | Line 246: | ||
Lade nie zwei Instanzen des Treiber oder führe zweimal den Initialisierungs Befehl aus, da der Enterprise dadurch abstürzen könnte. | Lade nie zwei Instanzen des Treiber oder führe zweimal den Initialisierungs Befehl aus, da der Enterprise dadurch abstürzen könnte. | ||
+ | Here is a simple way to detect if the driver has been already loaded in Basic: | ||
+ | |||
+ | 100 WHEN EXCEPTION USE DRIVER_LOADING | ||
+ | 110 SET 189,4 ! try to set EnterMice control mode. Only possible if the driver has been installed. | ||
+ | 120 END WHEN | ||
+ | |||
+ | |||
+ | 1000 HANDLER DRIVER_LOADING | ||
+ | 1010 EXT "LOAD MOUSE.XR" ! The file has to be on the current directory, if not, the program will give us another error. | ||
+ | 1020 PRINT "Loading the Mouse Driver" | ||
+ | 1030 SET 189,4 ! Here we assume that the driver has been correctly installed. | ||
+ | 1040 END HANDLER | ||
+ | |||
+ | It can be made more complex and effective, setting a variable on the handler to signal the not-loaded status, loading the driver on the main program. Then, if the file is not found(probably we are on another path), the error can be parsed on the same or on another handler. | ||
+ | |||
+ | It is a good practice to avoid installing several instances of the Mouse Driver. | ||
− | Das Ausführen von ":MOUSE" zeigt einige Informationen über den Treiber und, falls eine EnterMice eingesteckt ist, ebenfalls Information über dieses Gerät. | + | Das Ausführen von ":HELP MOUSE" zeigt einige Informationen über den Treiber und, falls eine EnterMice eingesteckt ist, ebenfalls Information über dieses Gerät. |
====Kommunikation mit dem Maus-Treiber==== | ====Kommunikation mit dem Maus-Treiber==== | ||
Line 199: | Line 272: | ||
Die erste und wichtigste Aktion ist es, einen Kanal für die Maus zu öffnen, z.B. OPEN £?:"MOUSE:" (? ist eine Kanal Nummer). | Die erste und wichtigste Aktion ist es, einen Kanal für die Maus zu öffnen, z.B. OPEN £?:"MOUSE:" (? ist eine Kanal Nummer). | ||
+ | |||
+ | Take in account that a mouse channel is always associated to a video channel where to draw the pointer. Opening a mouse channel without a video channel is not possible and, if the video channel disappears or changes, the mouse routine will detect it, deactivating itself. Remember, the mouse channel will remain opened but ineffective. | ||
+ | |||
+ | Also, if you STOP your mouse-based Basic program, always type CLOSE £? before typing TEXT, as the Basic Editor automatically closes the graphics video channel. | ||
Befehle die durch Drucken von Zeichen auf dem Maus-Kanal ausgeführt werden: | Befehle die durch Drucken von Zeichen auf dem Maus-Kanal ausgeführt werden: | ||
Line 275: | Line 352: | ||
====Beispiele==== | ====Beispiele==== | ||
+ | [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=14678 download] | ||
100 PROGRAM "ms_test.bas" | 100 PROGRAM "ms_test.bas" | ||
Line 367: | Line 445: | ||
====Benutzung des Mausrads und der Extra-Knöpfe in eigenen Programmen==== | ====Benutzung des Mausrads und der Extra-Knöpfe in eigenen Programmen==== | ||
− | Die Verwendung von Bits in Enterprise Baisc ist langsam und schwierig. Die System Variable 190 enthält viele Infomationen, diese sind aber nicht einfach zu extrahieren | + | Die Verwendung von Bits in Enterprise Baisc ist langsam und schwierig. Die System Variable 190 enthält viele Infomationen, diese sind aber nicht einfach zu extrahieren: |
+ | |||
+ | 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 | ||
+ | |||
+ | Du kannst diese Maschinen-Sprache Routine in einem Basic Programm verwenden um es in fünf Bytes zu zerteilen. Zusätzlich setzt diese MC Routine den Z_COUNTER immer bei Ausführung auf Null: | ||
100 ALLOCATE 42 | 100 ALLOCATE 42 | ||
Line 439: | Line 535: | ||
Durch Ausführen des HELP Befehls in EXOS kannst du die Version des Teribers in einer Liste sehen die alle Erweiterungen anzeigt. | Durch Ausführen des HELP Befehls in EXOS kannst du die Version des Teribers in einer Liste sehen die alle Erweiterungen anzeigt. | ||
− | + | The driver works on both graphic and text modes but it is planned to implement it also on editor modes, executing some action just on the pointer coordinates when a button is being pressed. Once achieved it will be easy to use the mouse for example on the Basic editor, WP or EXDOS. | |
Line 531: | Line 627: | ||
150 IF FIRE2 THEN PRINT "FIRE I PRESSED" | 150 IF FIRE2 THEN PRINT "FIRE I PRESSED" | ||
160 LOOP | 160 LOOP | ||
− | |||
Das ist die Übersetzung dieses Codes: | Das ist die Übersetzung dieses Codes: | ||
− | |||
org: 7c ld a,h ; h is the row, l is the column. (H*256+L) | org: 7c ld a,h ; h is the row, l is the column. (H*256+L) | ||
Line 555: | Line 649: | ||
==Fehlerbehebung== | ==Fehlerbehebung== | ||
===Tastaturproblem=== | ===Tastaturproblem=== | ||
− | [[File:KbdIssue1.jpg|thumb|200px| | + | [[File:KbdIssue1.jpg|thumb|200px|Abbildung 1]] |
− | [[File:KbdIssue2.jpg|thumb|200px| | + | [[File:KbdIssue2.jpg|thumb|200px|Abbildung 2]] |
− | [[File:KbdIssue3.jpg|thumb|200px| | + | [[File:KbdIssue3.jpg|thumb|200px|Abbildung 3]] |
− | |||
Während der Entwicklung des EnterMice wurde ein ziemlich ernster Fehler im Design des Enterprise praktisch nebenbei entdeckt. | Während der Entwicklung des EnterMice wurde ein ziemlich ernster Fehler im Design des Enterprise praktisch nebenbei entdeckt. | ||
Line 565: | Line 658: | ||
Das Problem besteht aus Interferenzen auf den Tastatur-Ports KB0..KB9, die ebenso von den Control Ports verwendet werden. | Das Problem besteht aus Interferenzen auf den Tastatur-Ports KB0..KB9, die ebenso von den Control Ports verwendet werden. | ||
− | Wenn nur eine Taste gedrückt wird, das passiert nichts falsches (siehe | + | Wenn nur eine Taste gedrückt wird, das passiert nichts falsches (siehe Abbildung 1). |
− | Wenn zwei Tasten in der gleichen Spalte gleichzeitig gedrückt werden, wird das Signal der gewählten Line auch auf die Line der zweiten Taste übertragen ( | + | Wenn zwei Tasten in der gleichen Spalte gleichzeitig gedrückt werden, wird das Signal der gewählten Line auch auf die Line der zweiten Taste übertragen (Abbildung 2). |
Dem Enterprise fehlen die entsprechenden Dioden um die Reihen der Tastatur zu unterscheiden! | Dem Enterprise fehlen die entsprechenden Dioden um die Reihen der Tastatur zu unterscheiden! | ||
− | Elektrisch passier nichts ( der LS145 Decoder im Computer hat offene Sammelausgänge), aber das lesen der externen Anschlüsse 1 und 2 verursacht Fehler. | + | Elektrisch passier nichts (der LS145 Decoder im Computer hat offene Sammelausgänge), aber das lesen der externen Anschlüsse 1 und 2 verursacht Fehler. |
− | Um die Ursache zu beseitigen, sollten sollten zu jeder Tastenreihe des Enterprise Dioden hinzugefügt werden, um zu vermeiden, das das Drück von mehr als einer Taste Kollisionen verursacht ( | + | Um die Ursache zu beseitigen, sollten sollten zu jeder Tastenreihe des Enterprise Dioden hinzugefügt werden, um zu vermeiden, das das Drück von mehr als einer Taste Kollisionen verursacht (Abbildung 3). |
Pear hat einen Entwurf einer Platine angefertigt, die das Problem beseitigt, diese wurde aber bisher noch nicht getestet. In der Zwischenzeit sollte, um Fehler zu vermeiden, die Tastatur nicht verwendet werden, während der Joystick oder die Maus benutzt werden. | Pear hat einen Entwurf einer Platine angefertigt, die das Problem beseitigt, diese wurde aber bisher noch nicht getestet. In der Zwischenzeit sollte, um Fehler zu vermeiden, die Tastatur nicht verwendet werden, während der Joystick oder die Maus benutzt werden. | ||
+ | |||
+ | [[File:KbdFixer.jpg|200px|Tastatur-Korrekttur (Visualisierung)]] | ||
+ | [[File:KbdFixerView.jpg|300px|Keyboard fixer]] | ||
+ | [[File:KbdFixerInside.jpg|300px|Keyboard fixer inside the Enterprise]] | ||
+ | [[File:KbdFixerConnected.jpg|300px|Keyboard connected via fixer]] | ||
===Microsoft optische Maus=== | ===Microsoft optische Maus=== | ||
Line 664: | Line 762: | ||
[[File:EM_SegaExt.png|thumb|200px|Diagram]] | [[File:EM_SegaExt.png|thumb|200px|Diagram]] | ||
[[File:adapter.jpg|thumb|200px|Prototype]] | [[File:adapter.jpg|thumb|200px|Prototype]] | ||
− | [[File:em_sega_mod.png|thumb|200px|EnterMice | + | [[File:em_sega_mod.png|thumb|200px|EnterMice Modifikation]] |
− | [[File:em_adapter.jpg|thumb|200px|EnterMice | + | [[File:em_adapter.jpg|thumb|200px|EnterMice mit Adapter]] |
zum Anschluss des Sega Pads mit sechs Knöpfen | zum Anschluss des Sega Pads mit sechs Knöpfen | ||
[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 | + | [https://www.cs.cmu.edu/~chuck/infopg/segasix.txt Sega Sechs-Knopf Controller Hardware Info] |
− | [https://applause.elfmimi.jp/md6bpad-e.html Interface Protocol | + | [https://applause.elfmimi.jp/md6bpad-e.html Interface Protocol von SEGA MegaDrive's 6-Knopf-Controller] |
{|class="wikitable" | {|class="wikitable" | ||
− | |+Sega | + | |+Sega Pad Anschlüsse |
− | ! | + | !Pin |
− | ! | + | !Auswahl = Low |
− | ! | + | !Auswahl = High |
− | ! | + | !Auswahl = pulse-3 |
|- | |- | ||
− | |style="text-align:center"|1||style="text-align:center"| | + | |style="text-align:center"|1||style="text-align:center"|Oben||style="text-align:center"|Oben||style="text-align:center"|Knopf Z |
|- | |- | ||
− | |style="text-align:center"|2||style="text-align:center"| | + | |style="text-align:center"|2||style="text-align:center"|Unten||style="text-align:center"|Unten||style="text-align:center"|Knopf Y |
|- | |- | ||
− | |style="text-align:center"|3||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"| | + | |style="text-align:center"|3||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"|links||style="text-align:center"|Knopf X |
|- | |- | ||
− | |style="text-align:center"|4||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"| | + | |style="text-align:center"|4||style="text-align:center; background-color: #cccccc"|GND||style="text-align:center"|rechts||style="text-align:center; background-color: #cccccc"|nicht verwendet |
|- | |- | ||
|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"| | + | |style="text-align:center"|6||style="text-align:center"|Knopf A||style="text-align:center"|Knopf B||style="text-align:center; background-color: #cccccc"|nicht verwendet |
|- | |- | ||
− | |style="text-align:center"|7||colspan=3 style="text-align:center"| | + | |style="text-align:center"|7||colspan=3 style="text-align:center"|Auswahl |
|- | |- | ||
|style="text-align:center"|8||colspan=3 style="text-align:center"|GND | |style="text-align:center"|8||colspan=3 style="text-align:center"|GND | ||
|- | |- | ||
− | |style="text-align:center"|9||style="text-align:center"|Start||style="text-align:center"| | + | |style="text-align:center"|9||style="text-align:center"|Start||style="text-align:center"|Knopf C||style="text-align:center; background-color: #cccccc"|nicht verwendet |
|} | |} | ||
====Neos Maus==== | ====Neos Maus==== | ||
− | [[File:EM_NeosExt.png|thumb|200px|Neos Twister | + | [[File:EM_NeosExt.png|thumb|200px|Neos Twister Diagramm]] |
{|class="wikitable" | {|class="wikitable" | ||
|+Neos Maus Belegung | |+Neos Maus Belegung | ||
!Pin | !Pin | ||
− | ! | + | !Funktion |
|- | |- | ||
|style="text-align:center"|1||style="text-align:center"|Oben | |style="text-align:center"|1||style="text-align:center"|Oben | ||
Line 726: | Line 824: | ||
====MSX Maus==== | ====MSX Maus==== | ||
− | [[File:EM_MsxExt.png|thumb|200px|MSX Twister | + | [[File:EM_MsxExt.png|thumb|200px|MSX Twister Diagramm]] |
{|class="wikitable" | {|class="wikitable" | ||
|+MSX Maus Belegung | |+MSX Maus Belegung | ||
− | ! | + | !Pin |
− | ! | + | !Funktion |
|- | |- | ||
− | |style="text-align:center"|1||style="text-align:center"| | + | |style="text-align:center"|1||style="text-align:center"|Oben |
|- | |- | ||
− | |style="text-align:center"|2||style="text-align:center"| | + | |style="text-align:center"|2||style="text-align:center"|Unten |
|- | |- | ||
− | |style="text-align:center"|3||style="text-align:center"| | + | |style="text-align:center"|3||style="text-align:center"|links |
|- | |- | ||
− | |style="text-align:center"|4||style="text-align:center"| | + | |style="text-align:center"|4||style="text-align:center"|rechts |
|- | |- | ||
|style="text-align:center"|5||style="text-align:center"|+5V | |style="text-align:center"|5||style="text-align:center"|+5V | ||
|- | |- | ||
− | |style="text-align:center"|6||style="text-align:center"| | + | |style="text-align:center"|6||style="text-align:center"|Knopf Wechsel links |
|- | |- | ||
− | |style="text-align:center"|7||style="text-align:center"| | + | |style="text-align:center"|7||style="text-align:center"|Knopf Wechsle rechts |
|- | |- | ||
|style="text-align:center"|8||style="text-align:center"|Strobe | |style="text-align:center"|8||style="text-align:center"|Strobe | ||
Line 752: | Line 850: | ||
====USB gadgets==== | ====USB gadgets==== | ||
+ | Der maximale Strom auf der PS/2-Anschluss wird durch die Effizienz der internen Stabilisatoren Enterprise beschränkt. | ||
+ | In der Praxis darf die Last sollte nicht mehr als 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]] | ||
==Informationen für Entwickler== | ==Informationen für Entwickler== | ||
Line 781: | Line 889: | ||
{|class="wikitable" | {|class="wikitable" | ||
!Bits | !Bits | ||
− | !colspan=4| | + | !colspan=4|Hoch knabbern |
− | !colspan=4| | + | !colspan=4|Nieder knabbern |
− | !rowspan=2| | + | !rowspan=2|Inhalt |
!rowspan=2 colspan=3| | !rowspan=2 colspan=3| | ||
|- | |- | ||
Line 795: | Line 903: | ||
|style="text-align:center"|signed int (positive is moved up) | |style="text-align:center"|signed int (positive is moved up) | ||
|-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"|Protocol identification & buttons 3,4,5 state (1=pressed) | ||
|colspan=2 rowspan=2|Extended MSX protocol | |colspan=2 rowspan=2|Extended MSX protocol | ||
|-style="background-color: #80ff80" | |-style="background-color: #80ff80" | ||
− | |style="text-align:right"|3||colspan=4 style="text-align:center"|''Horizontal wheel'' | + | |style="text-align:right"|3||colspan=4 style="text-align:center"|''Horizontal wheel''<sup> 2)</sup>||colspan=4 style="text-align:center"|Z value |
|style="text-align:center"|signed int (positive is wheel moved up) | |style="text-align:center"|signed int (positive is wheel moved up) | ||
|-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"|Extra bytes available to read (include this) & PS/2 mouse ID | ||
|colspan=3 rowspan=4|EnterMice extension protocol | |colspan=3 rowspan=4|EnterMice extension protocol | ||
Line 816: | Line 924: | ||
|style="text-align:center"|EnterMice ID is 5Dh | |style="text-align:center"|EnterMice ID is 5Dh | ||
|} | |} | ||
− | + | <sup> 1)</sup> Wenn nur das Gerät die BoxSoft-Protokoll unterstützt, ist das fünfte knabbern auf 0000 immer gleich. | |
+ | |||
+ | <sup> 2)</sup> Noch nicht umgesetzt, jetzt repränsentieren alle 8 Bits einen Z Wert (vertikales Rad). | ||
+ | |||
+ | <sup> 3)</sup> Wenn das Gerät nicht das EnterMice-Protokoll unterstützt, ist das neunte knabbern auf 0000 immer gleich. | ||
+ | |||
+ | |||
Du musst nicht alle Daten aus dem Puffer lesen. | Du musst nicht alle Daten aus dem Puffer lesen. | ||
Line 1,090: | Line 1,204: | ||
| ||cp 3|| | | ||cp 3|| | ||
|- | |- | ||
− | | ||jr z, | + | | ||jr z,J_COLUMN|| |
|- | |- | ||
|K_COLUMN:|| || | |K_COLUMN:|| || | ||
Line 1,114: | Line 1,228: | ||
| ||jr CONTINUE|| | | ||jr CONTINUE|| | ||
|- | |- | ||
− | | | + | |J_COLUMN:|| || |
|- | |- | ||
| ||ld a,b|| | | ||ld a,b|| | ||
Line 1,126: | Line 1,240: | ||
| ||;ld c,a||; this is not necessary | | ||;ld c,a||; this is not necessary | ||
|- | |- | ||
− | | ||rra||; data read from | + | | ||rra||; data read from J column |
|- | |- | ||
| ||rl d|| | | ||rl d|| | ||
|- | |- | ||
− | | ||djnz | + | | ||djnz J_COLUMN|| |
|- | |- | ||
|CONTINUE:|| || | |CONTINUE:|| || | ||
Line 1,139: | Line 1,253: | ||
|} | |} | ||
</code> | </code> | ||
+ | ===Minimum EnterMice reading routine, thanks to Bruce Tanner=== | ||
+ | |||
+ | This 79 bytes routine is strictly MSX protocol, only reads movement plus the two main buttons. It is intended for easy conversions or adaptations of old programs or games. It must be driven by a 50Hz interrupt, and assumes that X_REL and Y_REL are contiguous in memory. | ||
+ | |||
+ | <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> | ||
+ | ===A still more condensed Mouse+all buttons+wheel reading routine, thanks by IstvanV=== | ||
+ | This routine even checks for VSYNC(50Hz)itself. | ||
− | = | + | |
+ | <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> | ||
+ | ===Mouse buttons reading without executing the rutine=== | ||
+ | |||
+ | EnterMice manages main buttons (wired ones) in a different manner than Boxsoft+Neos. On the original interface you always can read the two buttons like you do with the joysticks fire keys, writing a zero or a five to the B5h Z80 port and then reading the returned value on the B6h port. This independently of reading or not the main mouse movement routine. | ||
+ | |||
+ | Due to the software nature of the PS/2 protocol, this can't be done directly on EnterMice, but the buttons alone can be requested easily by changing RTS state (just at least 2 μs and then can again high just before writing zero to B5h port). Then, after 1,5 ms EnterMice will start parsing PS/2 (that lasting in worst case 12 ms) and then putting on B6h port the correct values for the buttons. | ||
+ | |||
+ | Example: | ||
+ | <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> | ||
+ | |||
+ | =Handbuch in anderen Sprachen= | ||
[[EnterMice|English]] | [[EnterMice|English]] | ||
Line 1,146: | Line 1,507: | ||
[[EnterMice_(Polski)|Polski]] | [[EnterMice_(Polski)|Polski]] | ||
+ | |||
+ | [[EnterMice_(Magyar)|Ungarisch]] |
Latest revision as of 16:18, 27 March 2019
Joysticks & PS/2 Mouse Interface for Enterprise 64 & 128 computer
Contents
- 1 Einführung
- 2 Aktuelle Liste von Programmen die kompatibel mit der Maus sind
- 3 Allgemeine Beschreibung
- 4 Wichtig
- 5 Verbindung mit einem Computer
- 6 Eigenschaften
- 7 Verwendung des Treiber
- 8 Fehlerbehebung
- 9 Technische Spezifikationen
- 10 Informationen für Entwickler
- 11 Handbuch in anderen Sprachen
Einführung
Dieses komplexe Interface wurde für die Enterprise 64/128 Computer Modelle entwickelt.
Die Fertigstellung ist der Höhepunkt von sechs Monaten Arbeit eines multidisziplinären Polnischen Entwicklers, der in einigen Foren als Pear bekannt ist (angestiftet vom spanischen Kollegen GFlorez, der zusammen mit Zozo (aus Ungarn) einer der ersten Tester des EnterMice war).
Das Hauptziel des Adapters ist es, die Verwendung von billigen und gut verfügbaren PS/2 Mäusen am Enterprise Rechner zu ermöglichen. Zusätzlich ermöglicht er den Anschluss von zwei Joysticks nach dem Atari-Standard ohne zusätzliche Adapter.
EnterMice basiert auf Lösungen, die im BoxSoft Maus Interface verwendet wurden, das die Neos Maus unterstützt (MSX Protokoll)
Einer der EnterMice Arbeits-Modi ist voll rückwärtskompatibel mit dem alten BoxSoft Maus Interface. Ein anderer Arbeits-Modus wandelt die Maus Bewegungen in Joystick Pulsationen um.
Eine kleine Geschichte über den Enterprise und die Mäuse
Die Erweiterung des Enterprise 128 um die Möglichkeit eine Maus zu verwenden ist nicht neu und auch keine exzentrische Idee einiger Geeks einer Retro-Computing Gruppe, sondern war schon von den ursprünglichen Enterprise Designern geplant. Das Problem war, das die Aufgabe an eine einfache Englische Firma mit Namen Aztec Software Ltd abgegeben wurde, die eine enttäuschende Arbeit ablieferten. Vor allem aus aus zwei Gründen: Das Produkt war hässlich [1], nicht mal ansatzweise Nahe an der abgerundeten Form des Enterprise. Zweitens, war es keine richtige Maus, da sie auf emulierten Joystick Bewegungen basierte. Ebenso verschwand zu dieser Zeit auch Enterprise Computing Ltd.
Die Benutzer Basis in England blieb aber in den folgenden Jahren sehr aktiv. Kleine Firmen wurden von Enterprise Enthusiasten gegründet. Neue Produkte wurden angeboten: Speichererweiterungen, kundenspezifische Kabel, Spiele, Utilities, Spectrum Emulatoren, ein IDE Controller, Eprom, Erweiterungen der Hauptplatine, serielle Modems und so weiter.
Die profilierteste Firma war Boysoft, gegründet von dem Entwickler Tim Box. Boxsoft bot die meisten der oben angeführten Produkte an. Meist im Paket mit einem Zeichenprogramm namens Paintbox [2], sie vertrieben einen Adapter [3] plus eine Neo Maus inkl. einem Treiber. Die Neos, im Inneren [4] eine MSX Maus [5], wurde auch erfolgreich auf andere 8-Bit Computer wie den Commodore 64 umgesetzt.
Zu dieser Zeit hatten nur wenige 8-Bit Computer eine funktionierende Maus mit so was ähnlichen wie einem GUI. Es war schwierig etwas Neues zu verkaufen, dessen Nutzen unbekannt war und das nicht vollständig in den Computer integriert war. Aus heutiger Sicht ist der Vorteil der Bedienung eines Betriebssystems und Anwendungen mit einer Maus offensichtlich, die bequeme Handhabung wird sofort bemerkt, wenn die Maus die Arbeit einstellt...
Letztendlich wurden nur ungefähr hundert der Paintbox-Pakete verkauft.
Das Paintbox Programm erreicht Ungarn separat. Ungarn kauften Enterprise Computer nur mit dem Wissen, dass sie aus UK kamen, aber nicht viel mehr. Als alle Enterprise 128 verkauft waren, wurden die Benutzer, wie im Ursprungsland verlassen. Noch einmal boten neue Firmen neue Produkte an. Dann begann eine Firma mit Namen "A studio" die Box Soft Gegenstände herzustellen und zu vertreiben und tarnten sie dabei als ihre eigenen Produkte. Eines der Programme war eine Paintbox Version ohne die Maus Option. Es benötigte nach wie vor den Treiber, war aber ein verkrüppelte Version. Auf der östlichen Seie des eisernen Vorhangs hatte nie jemand von der Neos Maus gehört.
Später wurde in Ungarn eine serielle Erweiterungskarte [6] für den Enterprise umgesetzt, dank dem Genie eines Teams von ungarischen Entwicklern: Gyula Mészáros für die Hardware und László Haluska (HSOFT) für die Software. HSOFT nahm den verkrüppelten "A studio" Maus Treiber und modifizierte ihn so, dass das er zu dem seriellen Interface mit einer Mouse System Maus passte und lieferte später einen eingebauten Treiber für das EPDOS 2.x Betriebssystem.
Das sind uralte Geschichten, aber vor einigen Jahren mit WWW, Internet und Globalisierung, tauchten einige der alten Boxsoft+Neo Artefakte auf und alle Teile des Puzzles begannen zueinander zu passen. Endlichen wurden die alten Versprechungen (wie auf der Werbung der Enterprise Computers Ltd. zu sehen) eines wirklichen proprietären Enterprise Maus Interface Wirklichkeit
Das neue EnterMice Interface, das hier vorgestellt wird, basiert auf der Arbeit des Boxsoft Team, wurde aber auf einen aktuellen Stand gebracht und unterstützt zusätzliche Optionen. (Es ist ein Wunder was Tim Box mit nur ein paar logischen Gattern und Dioden damals gemacht hat[7]) Was die Software betrifft, wurde der Treiber von D. Rabson, Andrew Fitter und Andrew Richards sehr gut geschrieben. Mit kleinen Modifikationen wirde der gleiche Treiber vom EnterMice Adapter verwendet.
Das grundsätzlich Problem auf das man beim Enterprise trifft, ist das die Anschlüsse und Signale weit von einem Joystick-Maus Standard entfernt sind. Kleine Anschlüsse auf der Rückseite die leicht falsch herum benutzt werden können und dann +5V for die Knöpfe verwenden wo es normal 0 Volt wären. Das Fehlen eines Schutzes vor dem Signal das zurück kommt wenn zwei oder mehr Knöpfe gleichzeitig gedrückt werden, keine Möglichkeit Informationen oder Stati an den Controller zu senden und noch weitere Probleme.
Das was Boxsoft mit gewöhnlichen, billigen Komponenten erreicht hat, wurde neu designed und verbessert mit zwei programmierbaren Chips und anderen modernen Bauteilen. Einer der Chips (ein Xilinx) ist zuständig für das Pinout und die Signalumsetzung auf die Atari-Standard Anschlüsse. Das original Boxsoft Interface definierte/standardisierte nur den ersten Anschluss, der benutzt wurde um die Neos Maus oder einen Standard-Joystick anzuschließen (aber nicht beide zur gleichen Zeit). Im aktuellen Projekt werden zwei Joystick-Anschlüsse zur Verfügung gestellt und stören dabei den Maus-Anschluß nicht.
Die Neos/MSX Maus ist heute nicht weit verbreitet, so das ein PS/2 auf MSX Umsetzung integriert wurde. Dies wird durch einen einfachen und billigen 12 MHz Atmel AT89C4051 erledigt, der fähig ist sich selbst auf die Frequenz des im Enterprise verwendeten Z80 Prozessor einzustellen. Mit diesem Chip und dem entsprechenden Coding, kann EnterMice sowohl mit einem 4 Mhz EP als auch mit einem beschleunigten 10 MHz EP auf die gleich Weise arbeiten.
Ebenso wurde das Maus-Lese-Protokoll erweitert, dabei dem neuen erweiterten MSX Protokoll von Prodatron und NYYRIKKI folgend, so dass Informationen über fünf Knöpfe auf einer Maus mit Scrollrad gesendet werden können, wenn vorhanden.
Aktuelle Liste von Programmen die kompatibel mit der Maus sind
Multiplay, Iview, Cview, by Istvan-V.[8]+ File, by Zozosoft.[9]
Paintbox mit dem Maus-Treiber[10]
The Enterprise Graphical Interface mit dem Maus-Treiber[11]
SymbOS intern, nur im EnterMice Modus by hack[12].By Prodatron[13].
Programme in Basic können mit dem Maus-Treiber arbeiten
Alte Programme die Joystick Anschluss 1 verwenden, mit EnterMice im Joystick Modus.
EDC Windows, internally in EnterMice mode and Hsoft driver mode. Benutzen Sie diese ausführbare Datei: [14]
SPEmu128 von Geco, der prima Emulator für Enterprise, kann jetzt Kempston-Maus adaptierte Spiele emulieren.[15] von EnterMice Maus Bewegung. Die liste der kompatibeln Spiele nimmt ständig zu.[16]
Die Liste der Spiele
Patience(Solitaire)[17]. Rom version[18]
SWAP [19]
Wolf2004 Ego-Shooter. ZX Konversion von Geco[20]
Bricky Prise. Erstellt von Geco, Endi und Szipucsu. Adapted to EnterMice by Isvan-V. [21] and [22]
Five in a Row. Strategiespiel in Basic geschrieben. Angepasst an EnterMice von Lacika. [23]
Chess Master 2000 Amstrad Konversion von Geco[24]
XEP128 und EP128emu Emulatoren
Auch wenn du keinen EnterMice Adapter hast, kannst du das Gefühl probieren, einen emulierten Enterprise mit Maus im PC zu benutzen. LGBs tolles XEP128[25] Emulator kann ihn jetzt mit der PC Maus exakt emulieren. Sie können es sogar mit SPEmu128 kombinieren, um ein Spektrum innerhalb des emulierten Enterprise zu emulieren. Die Kempston-Maus wird Ihren PC-Mausbewegungen folgen ....
Hier[26] ist eine Erklärung, wie der XEP128 Emulator richtig auf Windows PC funktioniert. (Englisch)
And here[27] ist die Erklärung für OSX. (Englisch)
Dank der Arbeiten von LGB auf seinem XEP128 Emulator, hat IstvanV auch EP128emu für EnterMice Emulation aktualisiert. Es gibt ein Windows-Installationsprogramm für die einfache Installation.
Hier kann die akutelle Version runterladen werden[28].
Allgemeine Beschreibung
Wichtig
Das Interface darf nicht angeschlossen werden wenn der Computer eingeschaltet ist !
Wenn nach dem Anschluß des Interface der Computer nicht normal startet oder sich ungewöhnlich verhält, muss er sofort abgeschaltet werden !
Prüfe ob das Interface richtig verbunden ist und versuche es nochmal.
Maus und Joystick können ein- und ausgesteckt werden, während der Computer eingeschaltet ist, ist aber nicht empfohlen. Es ist sicherer Geräte anzuschließen wenn der Computer ausgeschaltet ist.
Warnung: Bitte lese den Abschnitt "Anschluss anderer Geräte an EnterMice" bevor du ein Gerät anschließt, für das das EnterMice ursprünglich nicht entwickelt wurde.
Verbindung mit einem Computer
Das Interface sollte gleichzeitig mit allen drei Anschlüssen auf der Rückseite des Enterprise verbunden werden: Control 1, Control 2 und Serial. Wie man erkennen kann, sind die Anschlüsse in einem etwas größeren Winkel als 90 Grad verbaut. Das ist beabsichtigt um sicher zu stellen, das das Entermice besser zur Form der Rückseite der Enterprise passt.
Es kann nur auf eine Art eingesteckt werden, aber die Anschluss-Pins könnten evt. nicht zentriert auf den Kontakten der Anschlüsse auf der Rückseite sitzen. Wenn das passiert könnte der Kontakt instabil sein und/oder das Interface nicht richtig funktionieren.
Richtig verbunden, funktioniert das Interface direkt nach einschalten des Stroms.
Nach dem Einschalten wird ein Selbst-Test durchgeführt, während dem sowohl das rote als auch das grüne LED dreimal blinken (unabhängig von der Einstellung von DIP-Schalter drei).
Das Entermice ist mit einem sogenannten "Hot-Plug" ausgestattet, so dass eine Maus während des Betriebs eingesteckt werden kann und dann auch klassifiziert und initialisiert wird und damit funktioniert. Allerdings ist es ratsam die Maus an das Entermice anzuschließen bevor der Enterprise eingeschaltet wird.
Nach erfolgreichem Abschluß der Initialisierung der Maus, leuchtet das grüne LED (wenn DS3 ON ist).
Eigenschaften
Das Interface kann in verschiedenen Modi arbeiten. Zur Konfiguration steht ein DIP-Schalter mit fünf Sektionen zur Verfügung.
Die Konfigurations-Einstellungen kann während das Interface in Betrieb ist geändert werden. Der Computer muss dazu nicht neu gestartet werden.
Hier ist die Beschreibung aller möglichen Einstellungen.
DS1 | DS2 | Arbeits Modus |
---|---|---|
ON | ON | EnterMice nativer Modus |
OFF | ON | BoxSoft Maus-Modus. Die zwei Haupt-Knöpfe sind vertauscht. Der Hauptknopf ist nun der rechte Knopf. |
OFF | OFF | EnterMice Joystick Modus (Bewegungen mit der Maus werden auf den Eingang von Joystick 1 umgeleitet und dieser Anschluss wird dekativiert) |
ON | OFF | nicht benutzt (tatsächlich aber EnterMice als Joystick auf der Tastatur Spalte K) |
Joystick 2 arbeitet immer auf die gleiche Weise, unabhängig von dem auf dem Interface ausgewählten Modus.
DS3 | LED Status |
---|---|
OFF | LED Status deaktiviert |
ON | LED Status aktiviert |
Konfiguration des Joystick Emulations Modus
DS4 | Empfindlichkeit |
---|---|
OFF | normal |
ON | hoch |
DS5 | diagonale Korrektur |
---|---|
OFF | deaktiviert |
ON | aktiviert |
Die diagonale Korrektur verbessert die Präzision der Joystick Simulation bei diagonalen Bewegungen, auf Kosten einer geringen Abnahme der Geschwindigkeit.
Verwendung des Treiber
Hier [29] kannst Du den Treiber finden.
Die folgenden Anweisungen wurden dem originalen Paintbox Handbuch entnommen, korrigiert und die neuen EnterMice Fähigkeien hinzugefügt.
Die Maus und wie sie in deinen Programmen zu verwenden ist
Die Verwendung der Maus ist nicht auf Programme in Maschinensprache beschränkt, sie kann auch ganz einfach in fast jedes Basic Programm eingebunden werden. Dazu ist die Verwendung einer EXOS Erweiterung namens "mouse driver" ("Mouse.xr") nötig.
This device driver will place a pointer on any graphic or text screen and by monitoring the movements of the mouse it will move the pointer around the screen in sync with it. The pointer on text video pages works internally on pixel coordinates, but is drawn only in character boundaries, so the movement can be shown as jerky on short distances.
Der Maus Treiber kann angewiesen werden verschiedene Befehle und Funktionen auszuführen - z.B. den Zeiger ein- und ausschalten. Es gibt zwei Wege mit dem Maus Treiber zu kommunizieren, wobei der erste ist, ihn zu lesen und zu schreiben und der zweite ist durch System Variablen.
Laden
Der Maus Treiber kann durch viele Methoden geladen werden; "START" aus Basic (wenn von Kassette) oder load "MOUSE.XR". Es kann auch aus "WP", aus EXDOS oder jeder anderen Sprache geladen werden (bitte die entsprechende Sprache zu Rate ziehen).
Einmal geladen bleibt er resistent bis zum nächsten Hard-Reset oder wenn der Rechner ausgeschaltet wird.
Um richtig zu funktionieren ist es notwendig ihn mit dem EXOS Befehl ":PB" zu initialisieren. EGI und Paintbox machen das intern.
Die angezeigte Fehlermeldung einfach ignorieren. Der Fehlercode (in BASIC mit EXTYPE zu erhalten) lautet 9000+Speicherseite wo der Treiber geladen wurde. Das wurde bewusst von den Autoren des Treibers so gemacht.
Eine Version die sich selbständig initialisiert kann zur Verfügung gestellt werden, funktioniert dann aber nicht mit EGI oder Paintbox, sondern nur in Basic.
Lade nie zwei Instanzen des Treiber oder führe zweimal den Initialisierungs Befehl aus, da der Enterprise dadurch abstürzen könnte.
Here is a simple way to detect if the driver has been already loaded in Basic:
100 WHEN EXCEPTION USE DRIVER_LOADING 110 SET 189,4 ! try to set EnterMice control mode. Only possible if the driver has been installed. 120 END WHEN
1000 HANDLER DRIVER_LOADING 1010 EXT "LOAD MOUSE.XR" ! The file has to be on the current directory, if not, the program will give us another error. 1020 PRINT "Loading the Mouse Driver" 1030 SET 189,4 ! Here we assume that the driver has been correctly installed. 1040 END HANDLER
It can be made more complex and effective, setting a variable on the handler to signal the not-loaded status, loading the driver on the main program. Then, if the file is not found(probably we are on another path), the error can be parsed on the same or on another handler.
It is a good practice to avoid installing several instances of the Mouse Driver.
Das Ausführen von ":HELP MOUSE" zeigt einige Informationen über den Treiber und, falls eine EnterMice eingesteckt ist, ebenfalls Information über dieses Gerät.
Kommunikation mit dem Maus-Treiber
Wie oben beschrieben gibt es zwei Wege um mit dem Maustreiber zu kommunizieren. Um diese zwei Methoden und ihre Aktionen zu demonstrieren, sollten wir erst einen Blick auf alle Befehle, funktionen und Variablen werfen und dann ihre Verwendung in einem Programm demonstrieren.
Gedruckt Befehle und Funktionen
Die erste und wichtigste Aktion ist es, einen Kanal für die Maus zu öffnen, z.B. OPEN £?:"MOUSE:" (? ist eine Kanal Nummer).
Take in account that a mouse channel is always associated to a video channel where to draw the pointer. Opening a mouse channel without a video channel is not possible and, if the video channel disappears or changes, the mouse routine will detect it, deactivating itself. Remember, the mouse channel will remain opened but ineffective.
Also, if you STOP your mouse-based Basic program, always type CLOSE £? before typing TEXT, as the Basic Editor automatically closes the graphics video channel.
Befehle die durch Drucken von Zeichen auf dem Maus-Kanal ausgeführt werden:
O | Mauszeiger einschalten |
---|---|
o | Mauszeiger ausschalten |
P | X & Y Position anfordern |
Ergebnisse oder Stati die erhalten werden durch das Lesen eines Zeichens vom Maus-Kanal:
Nur Lesen nach dem Senden von "P":
X | Low byte |
X | High byte |
Y | Low byte |
Y | High byte |
Immer lesbar:
Feuer = "1" wenn der Haupt-Knopf gedrückt ist, "0" wenn nicht.
System Variablen
Addresse | Inhalt | Standard |
---|---|---|
180 | Video Kanal, Zeige muss "Ein" sein | 101 |
181 | Position von X,Y Koordinaen auf der Sttatuszeile | 30 |
182 | Status Koordinaten Anzeige: 1 ein, 0 aus | 0 |
183 | Farbe des Zeigers {prüfe Technische Sektion} | 255 |
184 | Low Byte der X Koordinate | |
185 | High Byte der X Koordinate. Prüfe das Demo Programm für dei Koordinaten Umwandlung | |
186 | Low Byte der Y Koordinate | |
187 | High Byte der Y Koordinate | |
188 | Status des Feuerknopf, 0 aus, 1 ein | |
189 | Eingabe-Gerät:
0 - interner Joystikc 1 - Control 1 2 - Control 2 3 - Boxsoft 4 - EnterMice (Standard) 5 - Serial Mouse Sytems 6 - Serial Microsoft in einer zukünftigen Version(aktuell verhält sich 6 wie 5) >6 - nicht implementiert |
|
190 | Status des zweiten Knopf und Ersatzknopf falls vorhanden, Zähler des Mausrads wenn vorhanden
Bits 0 to 3 signiertes Halbbyte des Mauszählers(7 -> -8) Bit 4 Mausrad-Knopf Bit 6 and 5 Ersatzknöpfe Bit 7 zweiter Knopf Stati der Knöpfe: 0 aus, 1 ein |
Beispiele
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 - Beachte X_COUNT ist = "2" in 2 Farben-Modus, "4" in vier Farben-Modus, "8" in 16 Farben-Modus und "16" in 2500 Farben-Modus. Alle diese Werte verdoppeln sich in LoRes.
Nun musst du die MOUSE_POS Routine hinzufügen. Diese überträgt die Maus-Position an den Treiber. Wähle einen der folgenden beiden Wege:
Lesen der Zeiger Koordinaten durch das Lesen vom Maus-Kanal.
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
Lesen der Zeiger Koordinaten aus den System-Variablen.
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
Du kanns adem Treiber auch befehlen den Zeiger an die gewünschte Stelle zu setzen:
Setzen der Maus Koordinaten durch die System Variablen.
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
Dieses Programm ist eine sehr einfaches Zeichen Programm; einfach eine Linie zeichnen um der Bewegung der Maus zu folgen wenn der Maus-Knopf gedrückt ist. Ein Aufruf an MOUSE_POS wird in Zeile 150 gemacht, davon abhängig wie die Daten gelesen werden sollen, musst du die entsprechende Prozedur von den beiden aufgeführten, einfügen. Es ist noch einer andere Prozedur angeführt, deren Routine dir die Möglichkeit gibt die Position des Zeigers fest zu legen. Ruf sie einfach auf mit der gewünschten Position in der Variablen X und Y auf, experimentiere mit den verschiedenen Routinen. teste sie und füge sie deinen eigenen Routinen hinzu. Es wird nicht lange dauern ein Gefühl dafür zu entwickeln und nach einer kurzen Zeit wirst du entdecken wie einfach es ist die Maus in existierende Programme einzubinden und spezielle Programm für die Maus zu entwickeln.
Benutzung des Mausrads und der Extra-Knöpfe in eigenen Programmen
Die Verwendung von Bits in Enterprise Baisc ist langsam und schwierig. Die System Variable 190 enthält viele Infomationen, diese sind aber nicht einfach zu extrahieren:
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
Du kannst diese Maschinen-Sprache Routine in einem Basic Programm verwenden um es in fünf Bytes zu zerteilen. Zusätzlich setzt diese MC Routine den Z_COUNTER immer bei Ausführung auf Null:
100 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
Hier ist das Disassembly der Mschinensprache Routine:
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
Dies ist eine Erklärung der Prozedur um das Mausrad zu programmieren:
Das niedrige Halbbyte der System-Variable 190 enthält die Anzahl der Impulse die vom Mausrad seit dem letzten Reset empfangen wurden. Die Impulse sind psotiv oder negativ, der Treiber addiert oder subtrahiert sie zum Zähler, der einen Wert von 7 bis -8 haben kann. Das Programm muss eine Timer-Routine zur Verfügung stellen, die den Zähler prüft (mit XPLOD). Einmal geprüft, wird der Zähler auf 0 zurückgesetzt (ebenso durch die XPLOD Routine) und der Wert, der gfunden wird (XPLPD+6) kann für eine Aufgabe verwendet werden, zum Beispiel zum Scrollen des Bildschirms.
Geht man davon aus, das der zweite Maus-Knopf auch "verdrahtet" ist und daher auch drekt von der Tastatur-Matrix gelesen werden kann (mit der beschriebenen Routine aus dem Abschnit "Lesen des Joystick Interface") oder einfacher durch vergleichen von Variable 190 mit Variable 127 (der zweite Knopf ist das 7 bit):
ASK 190 SECBUTT IF SECBUTT>127 THEN GOTO MENU !secondary mouse button pressed!!!
Technische Informationen zum Treiber
Durch Ausführen des HELP Befehls in EXOS kannst du die Version des Teribers in einer Liste sehen die alle Erweiterungen anzeigt.
The driver works on both graphic and text modes but it is planned to implement it also on editor modes, executing some action just on the pointer coordinates when a button is being pressed. Once achieved it will be easy to use the mouse for example on the Basic editor, WP or EXDOS.
Werte für EXOS Variable 183 zum Wechseln der Farbe des Mauszeigers
Einstellung | Resultat | |
---|---|---|
INK | Farbe | |
2 Farben-Modus | 0 | 0 |
255 | 1 | |
4 Farben-Modus | 0 | 0 |
240 | 1 | |
15 | 2 | |
255 | 3 | |
16 Farben-Modus | 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 | |
256 Farben-Modus | 0-255 | 0-255 |
Joystick Modus des EnterMice Maus Interface
Eine Maus, die an den EnerMice PS/2 Anschluss angeschlossen ist, ist nicht darauf beschränkt nur als Maus zu dienen, sie kann auch verwendet werden um einen Joystick zu simulieren. Um diesen Modus zu aktivieren müssen die beiden Schalter DS1 und DS2 auf OFF eingestellt werden. Das Interface konvertiert dann die Bewegungen auf dem PS/2 Anschluss auf Joystick Anschluss 1. Dazu muss ein evt. vorhandener Joystick nicht abgesteckt werden, da der Anschluss deaktiviert wird. Die Maus sendet dann Bewegungen wie ein Joystick, nützlich für ältere Programme oder Spiele.
Wenn DS3 auf ON steht, leuchtet im Joystick Modus das rote LED. Es blinkt wenn eine Richtungs-Kontakt gekürzt wird.
Hinweis: Der Feuer-Knopf ist der linke Knopf der Maus. Um den rechten Knopf zu verwenden benütze die Routinen die in der Sektion zum Maus Interface vorgestellt wurden.
Die Joystick Anschlüsse
Das EnterMice Maus Interface arbeitet nicht nur als Maus Interface, sondern auch als intelligentes Joystick Interface. Jeder Atari-Kempston-Amiga Joystick kann an einen der beiden 9 Pin-Anschüsse auf der Rückseite des Interface angeschlossen werden. Wenn der Joystick eine Autofeuer-Funktion hat, funktioniert diese. Maus und Joystick können gleichzeitig angeschlossen sein, da sie sich nicht gegenseitig beeinflussen.
Lesen des Joystick Interface
Ursprünglich hatten die Control-Anschlüsse des Enterprise nur einen Feuerknopf, aber nun bietet das EnterMice Interface zwei mehr auf beiden Anschlüssen. Offensichtlich arbeiten sie nicht mit alten Spielen, sondern nur mit neuen Veröffentlichungen oder neuen Umsetzungen von Spielen.
Alle normalen Methoden die beiden Anschlüsse zu lesen funktionieren. Der einzige Extra-Code der benötigt wird ist zum Lesen der extra Feuerknöpfe. Ein Beispiel des Codes ist hier:
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
Das ist die Übersetzung dieses Codes:
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
Du kannst die drei Feuerknöpfe der beiden Joystick-Anschlüsse des EnterMice lesen durch ändern der Basic Zeile "140 LET FIRE2=USR(FIRE,4)", die "4" durch eine "1" oder eine "2".(H=0). Für den zweiten Anschluss muss "1281","1282" or "1284".(H=5) verwendet werden
Diese Methode kann auch genutzt werden die beiden Haupt-Maus-Knöpfe zu lesen, da diese sich die Feuerknöpfe auf Control 1 teilen
Fehlerbehebung
Tastaturproblem
Während der Entwicklung des EnterMice wurde ein ziemlich ernster Fehler im Design des Enterprise praktisch nebenbei entdeckt.
Er bleib völlig unbemerkt so lange nicht an die Anschlüsse Control 1 und Control 2 angeschlossen wird. Wie auch immer, das EnterMice benutzt sie....
Das Problem besteht aus Interferenzen auf den Tastatur-Ports KB0..KB9, die ebenso von den Control Ports verwendet werden.
Wenn nur eine Taste gedrückt wird, das passiert nichts falsches (siehe Abbildung 1).
Wenn zwei Tasten in der gleichen Spalte gleichzeitig gedrückt werden, wird das Signal der gewählten Line auch auf die Line der zweiten Taste übertragen (Abbildung 2).
Dem Enterprise fehlen die entsprechenden Dioden um die Reihen der Tastatur zu unterscheiden!
Elektrisch passier nichts (der LS145 Decoder im Computer hat offene Sammelausgänge), aber das lesen der externen Anschlüsse 1 und 2 verursacht Fehler.
Um die Ursache zu beseitigen, sollten sollten zu jeder Tastenreihe des Enterprise Dioden hinzugefügt werden, um zu vermeiden, das das Drück von mehr als einer Taste Kollisionen verursacht (Abbildung 3).
Pear hat einen Entwurf einer Platine angefertigt, die das Problem beseitigt, diese wurde aber bisher noch nicht getestet. In der Zwischenzeit sollte, um Fehler zu vermeiden, die Tastatur nicht verwendet werden, während der Joystick oder die Maus benutzt werden.
Microsoft optische Maus
Die PS/2 Microsoft Optical Maus ist ein spezieller Fall. Sie sollte nur angeschlossen werden, wenn sie mit dem original Microsoft USB PS/2 Adapter verbunden ist. Sie funktionier mit dem EnterMice wenn sie vor dem Einschalten angeschlossen wurde, aber in diesem speziellen Fall kann das die Hot-Plug Funktion nicht verwendet werden, da sie nicht erkannt wird.
EnterMice kann gezwungen werden die Maus während der Arbeit zu erkennen. Es muss nur der RESET auf der Stiftleiste schnell kurzgeschlossen oder man drück den RESET Knopf auf neueren Platinen (es wird nur das Interface resettet und nicht der Computer).
Technische Spezifikationen
Joystick-Port-Belegung
pin | signal |
---|---|
1 | Up |
2 | Down |
3 | Left |
4 | Right |
5 | Fire 3 |
6 | Fire 1 |
7 | +5 V |
8 | GND |
9 | Fire 2 |
Control Map
J column (bit 0) | K column (bit 1) | L column (bit 2) | |||||
---|---|---|---|---|---|---|---|
JM=0* | JM=1* | JM=0 | JM=1 | JM=0 | JM=1 | ||
Control 1 | Row 0 Fire | Joy 1 Fire 1 | Mice Left Btn | Mice Left Btn or Joy 1 Fire 2* | Joy 1 Fire 2 | Mice Right Btn or Joy 1 Fire 3* | |
Row 1 Up | Joy 1 Up | Mice D0 | Mice D0 | spare | spare | spare | |
Row 2 Down | Joy 1 Down | Mice D1 | Mice D1 | spare | spare | spare | |
Row 3 Left | Joy 1 Left | Mice D2 | Mice D2 | spare | spare | spare | |
Row 4 Right | Joy 1 Right | Mice D3 | Mice D3 | spare | spare | spare | |
Control 2 | Row 5 Fire | Joy 2 Fire 1 | Joy 2 Fire 2 | Joy 2 Fire 3 | |||
Row 6 Up | Joy 2 Up | spare | spare | spare | spare | ||
Row 7 Down | Joy 2 Down | spare | spare | spare | spare | ||
Row 8 Left | Joy 2 Left | spare | spare | spare | spare | ||
Row 9 Right | Joy 2 Right | spare | spare | spare | spare |
* Mouse buttons have higher priority * JM=0 (DS1 ON) native EnterMice mouse mode JM=1 (DS1 OFF) joystick emulation & BoxSoft compatible mode
Anschluss anderer Geräte an EnterMice
SEGA Twister
zum Anschluss des Sega Pads mit sechs Knöpfen [30]
Sega Sechs-Knopf Controller Hardware Info
Interface Protocol von SEGA MegaDrive's 6-Knopf-Controller
Pin | Auswahl = Low | Auswahl = High | Auswahl = pulse-3 |
---|---|---|---|
1 | Oben | Oben | Knopf Z |
2 | Unten | Unten | Knopf Y |
3 | GND | links | Knopf X |
4 | GND | rechts | nicht verwendet |
5 | +5V | ||
6 | Knopf A | Knopf B | nicht verwendet |
7 | Auswahl | ||
8 | GND | ||
9 | Start | Knopf C | nicht verwendet |
Neos Maus
Pin | Funktion |
---|---|
1 | Oben |
2 | Unten |
3 | Links |
4 | Rechts |
5 | Nicht angeschlossen |
6 | /Strobe - linker Schalter |
7 | +5V |
8 | GND |
9 | Knopf Wechsel rechts |
MSX Maus
Pin | Funktion |
---|---|
1 | Oben |
2 | Unten |
3 | links |
4 | rechts |
5 | +5V |
6 | Knopf Wechsel links |
7 | Knopf Wechsle rechts |
8 | Strobe |
9 | GND |
USB gadgets
Der maximale Strom auf der PS/2-Anschluss wird durch die Effizienz der internen Stabilisatoren Enterprise beschränkt. In der Praxis darf die Last sollte nicht mehr als 300 mA.
3D housing
First version (DIP switch on the component side)
Second version (DIP switch on the side of the edge connectors)
Informationen für Entwickler
EnterMice Timing
Die Firmware des EnterMice ist für das zyklische Lesen mit 50 Hz Frequenz optimiert (Video IRQ).
Standard Lese-Zyklus | 20 ms |
Wartezeit um einen Slebsttest der PS"/Maus durchzuführen (Auszeit) | ca. 2000 ms |
Zeit zum Sammeln der PS/2 Maus-Daten | max. 12 ms |
Time from change state of RTS signal to issue data (nibble) for reading | 25 μs |
Standby time for the next reading (counting from data issue) | 14 μs |
Time from read the last nibble of data to reset the nibble counter (timeout)* | 1500 μs |
Default mouse polling time in joystick emulation mode | 30 ms |
Mouse polling time in joystick emulation mode when mouse doesn't move (minimize polling delay) | 12,5 ms |
* After this time starts another mouse data polling.
Datenpuffer
Der Datenpuffer des EnterMice hate eine Größe von 16 Bytes.
Derzeit wird nur die Hälfte benutzt. Der Rest kann in der Zukunft verwendet werden.
Bits | Hoch knabbern | Nieder knabbern | Inhalt | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
0 | X value | signed int (positive is moved left) | BoxSoft protocol | |||||||||
1 | Y value | signed int (positive is moved up) | ||||||||||
2 | 0 | 0 | 0 | 1 1) | 0 | Btn5 | Btn4 | Btn3 | Protocol identification & buttons 3,4,5 state (1=pressed) | Extended MSX protocol | ||
3 | Horizontal wheel 2) | Z value | signed int (positive is wheel moved up) | |||||||||
4 | ExCnt 3) | Mouse ID | Extra bytes available to read (include this) & PS/2 mouse ID | EnterMice extension protocol | ||||||||
5 | Hw ver. mj. | Hw ver. mn. | Hardware version (major.minor) | |||||||||
6 | Fw ver. mj. | Fw ver. mn. | Firmware version (major.minor) | |||||||||
7 | Device ID | EnterMice ID is 5Dh |
1) Wenn nur das Gerät die BoxSoft-Protokoll unterstützt, ist das fünfte knabbern auf 0000 immer gleich.
2) Noch nicht umgesetzt, jetzt repränsentieren alle 8 Bits einen Z Wert (vertikales Rad).
3) Wenn das Gerät nicht das EnterMice-Protokoll unterstützt, ist das neunte knabbern auf 0000 immer gleich.
Du musst nicht alle Daten aus dem Puffer lesen.
Das Lesen kann jederzeit unterbrochen werden. Es wird eine Auszeit geben und das Interface liest nochmal Daten von der Maus und ist dann wieder bereit Daten zu senden.
Der letzte Status des RTS Signals spielt auch keine Rolle. EnterMice reagiert auf den Wechsel-Status und nicht auf den Signalpegel.
Maus lesen
; 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 |
Minimum EnterMice reading routine, thanks to Bruce Tanner
This 79 bytes routine is strictly MSX protocol, only reads movement plus the two main buttons. It is intended for easy conversions or adaptations of old programs or games. It must be driven by a 50Hz interrupt, and assumes that X_REL and Y_REL are contiguous in memory.
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 |
A still more condensed Mouse+all buttons+wheel reading routine, thanks by IstvanV
This routine even checks for VSYNC(50Hz)itself.
;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 |
Mouse buttons reading without executing the rutine
EnterMice manages main buttons (wired ones) in a different manner than Boxsoft+Neos. On the original interface you always can read the two buttons like you do with the joysticks fire keys, writing a zero or a five to the B5h Z80 port and then reading the returned value on the B6h port. This independently of reading or not the main mouse movement routine.
Due to the software nature of the PS/2 protocol, this can't be done directly on EnterMice, but the buttons alone can be requested easily by changing RTS state (just at least 2 μs and then can again high just before writing zero to B5h port). Then, after 1,5 ms EnterMice will start parsing PS/2 (that lasting in worst case 12 ms) and then putting on B6h port the correct values for the buttons.
Example:
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 |