Difference between revisions of "EnterMice (Polski)"

From Enterprise Wiki
Jump to: navigation, search
m (Krótka historia o Enterprise i myszy)
(Specyfikacja techniczna)
 
(154 intermediate revisions by 2 users not shown)
Line 4: Line 4:
 
Opisany poniżej zintegrowany interfejs został zaprojektowany dla komputerów Enterprise 64/128.
 
Opisany poniżej zintegrowany interfejs został zaprojektowany dla komputerów Enterprise 64/128.
  
Jest efektem sześciu miesięcy pracy polskiego hobbysty znanego na forach dyskusyjnych pod nickiem Pear. Prace zostały rozpoczęte za namową hiszpańskiego kolegi GFlorez z forum [https://enterpriseforever.com|EnterpriseForever.com].
+
Jest efektem sześciu miesięcy pracy polskiego hobbysty znanego na forach dyskusyjnych pod nickiem Pear. Prace zostały rozpoczęte za namową hiszpańskiego kolegi GFlorez (który wraz z Zozo, jako pierwsi użytkownicy testowali EnterMice) z forum [https://enterpriseforever.com EnterpriseForever.com].
  
 
Głównym przeznaczeniem interfejsu jest możliwość podłączenia taniej i powszechnie dostępnej myszki PS/2 do komputera Enterprise. Ponadto umożliwia podłączenie dwóch joysticków standardu Atari bezpośrednio, bez konieczności stosowania dodatkowych adapterów.
 
Głównym przeznaczeniem interfejsu jest możliwość podłączenia taniej i powszechnie dostępnej myszki PS/2 do komputera Enterprise. Ponadto umożliwia podłączenie dwóch joysticków standardu Atari bezpośrednio, bez konieczności stosowania dodatkowych adapterów.
Line 35: Line 35:
 
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/RS232~3.jpg] dla Enterprise, dzięki genialnemu zespołowi węgierskich projektantów: Gyula Mészáros sprzęt i László Haluska (HSOFT) oprogramowanie. HSOFT przystosował okrojony przez "A studio" sterownik myszki do współpracy z szeregową myszką Mouse Systems, a następnie stworzył sterownik wbudowany w system operacyjny EPDOS 2.x.
 
[http://ep.homeserver.hu/Galery/Bovitmenyek/Picture/RS232~3.jpg] dla Enterprise, dzięki genialnemu zespołowi węgierskich projektantów: Gyula Mészáros sprzęt i László Haluska (HSOFT) oprogramowanie. HSOFT przystosował okrojony przez "A studio" sterownik myszki do współpracy z szeregową myszką Mouse Systems, a następnie stworzył sterownik wbudowany w system operacyjny EPDOS 2.x.
  
To już odległa historia, ale w obecnych czasach globalizacji i ogólnodostępnego do Internetu, pojawiło się kilka starych artefaktów Boxsoft+Neos i wszystkie kawałki układanki zaczęły do siebie pasować. W końcu, spełniły się stare obietnice (zobacz reklamy Enterprise Computers Ltd.) i Enterprise doczekał się własnego interfejsu myszki z prawdziwego zdarzenia.  
+
To już odległa historia, ale w obecnych czasach globalizacji i ogólnodostępnego Internetu, pojawiło się kilka starych artefaktów Boxsoft+Neos i wszystkie kawałki układanki zaczęły do siebie pasować. W końcu, spełniły się stare obietnice (zobacz reklamy Enterprise Computers Ltd.) i Enterprise doczekał się własnego interfejsu myszki z prawdziwego zdarzenia.  
  
  
Line 41: Line 41:
  
  
Nowy interfejs EnterMice prezentowany tutaj bazuje na pracy grupy Boxsoft, ale został zaadaptowany do współczesnych potrzeb i stwarza nowe możliwości. (To cud co osiągnął Tim Box wyłącznie przy pomocy kilku bramek i diod). Co do oprogramowania zaś, to sterownik był bardzo dobrze napisany przez D. Rabson, Andrew Fitter i Andrew Richards. Z niewielkimi modyfikacjami, ten sam sterownik jest używany przez interfejs EnterMice.
+
Nowy interfejs EnterMice prezentowany tutaj bazuje na pracy grupy Boxsoft, ale został zaadaptowany do współczesnych potrzeb i stwarza nowe możliwości. (To cud co osiągnął Tim Box wyłącznie przy pomocy kilku bramek i diod [http://enterpriseforever.com/egyeb-temak/paintbox-mouse-xr/?action=dlattach;attach=8032;image]). Co do oprogramowania zaś, to sterownik był bardzo dobrze napisany przez D. Rabson, Andrew Fitter i Andrew Richards. Z niewielkimi modyfikacjami, ten sam sterownik jest używany przez interfejs EnterMice.
  
 
Podstawowym problemem interfejsów dla Enterprise są złącza oraz sygnały dalece odbiegające od standardów myszy i josticka. Małe złącza krawędziowe, które przypadkowo można podłączyć do góry nogami, sygnały przycisków podciągnięte do +5V podczas, gdy standardem jest łączenie ich do 0V, brak jakichkolwiek zabezpieczeń przed zwarciem kilku przycisków jednocześnie, brak możliwości przesłania informacji zwrotnie do sterownika i prawdopodobnie jeszcze wiele innych przypadłości.
 
Podstawowym problemem interfejsów dla Enterprise są złącza oraz sygnały dalece odbiegające od standardów myszy i josticka. Małe złącza krawędziowe, które przypadkowo można podłączyć do góry nogami, sygnały przycisków podciągnięte do +5V podczas, gdy standardem jest łączenie ich do 0V, brak jakichkolwiek zabezpieczeń przed zwarciem kilku przycisków jednocześnie, brak możliwości przesłania informacji zwrotnie do sterownika i prawdopodobnie jeszcze wiele innych przypadłości.
Line 47: Line 47:
 
Teraz to co Boxsoft wykonał przy użyciu dostępnych, tanich komponentów, zostało przeprojektowane i ulepszone z użyciem dwóch nowocześniejszych programowalnych układów. Jeden z tych układów (Xilinx XC9572) jest odpowiedzialny za połączenia i konwersję sygnałów do standardowego joysticka Atari. Oryginalny interfejs Boxsoft korzystał tylko z portu Control 1, który mógł być używany do podłączenia myszy Neos lub joysticka (ale nie obu jednocześnie). W niniejszym projekcie są podłączone i udostępnione oba porty joysticków nie zakłócające się ze złączem myszki.
 
Teraz to co Boxsoft wykonał przy użyciu dostępnych, tanich komponentów, zostało przeprojektowane i ulepszone z użyciem dwóch nowocześniejszych programowalnych układów. Jeden z tych układów (Xilinx XC9572) jest odpowiedzialny za połączenia i konwersję sygnałów do standardowego joysticka Atari. Oryginalny interfejs Boxsoft korzystał tylko z portu Control 1, który mógł być używany do podłączenia myszy Neos lub joysticka (ale nie obu jednocześnie). W niniejszym projekcie są podłączone i udostępnione oba porty joysticków nie zakłócające się ze złączem myszki.
  
Myszki Neos/MSX nie są dziś często spotykane w związku z czym zaimplementowano konwersję protokołu myszy PS/2 do MSX. Tą część obsługuje drugi z układów, prosty i nie drogi kontroler Atmel AT89C4051, którego oprogramowanie wewnętrzne zostało zoptymalizowane do pracy nawet z podrasowanym komputerem Enterprise. EnterMice działa równie dobrze z Enterprise ze standardowym zegarem 4 MHz jak i z jego superdoładowaną 10 MHz wersją.
+
Myszki Neos/MSX nie są dziś często spotykane w związku z czym zaimplementowano konwersję protokołu myszy PS/2 do MSX. Tą część obsługuje drugi z układów, prosty i niedrogi kontroler Atmel AT89C4051, którego oprogramowanie wewnętrzne zostało zoptymalizowane do pracy nawet z podrasowanym komputerem Enterprise. EnterMice działa równie dobrze z Enterprise ze standardowym zegarem 4 MHz jak i z jego superdoładowaną 10 MHz wersją.
  
 
Również protokół odczytu myszy został wzbogacony o nowe rozszerzenie protokołu MSX autorstwa Prodatron i NYYRIKKI, które pozwala na odczytanie stanu nawet pięciu przycisków oraz kółka, jeśli myszka je posiada.
 
Również protokół odczytu myszy został wzbogacony o nowe rozszerzenie protokołu MSX autorstwa Prodatron i NYYRIKKI, które pozwala na odczytanie stanu nawet pięciu przycisków oraz kółka, jeśli myszka je posiada.
Line 53: Line 53:
 
==Lista programów współpracujących z myszką (aktualizowana)==
 
==Lista programów współpracujących z myszką (aktualizowana)==
  
Paintbox ze sterownikiem myszy.
+
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] Wewnętrznie.
  
Enterprise Graphical Interfance (EGI) ze sterownikiem myszy.
+
[[File:File.jpg]]
  
SymbOS wewnętrznie, tylko w trybie zgodności z Boxsoft, ale wkrótce również w podstawowym trybie myszy EnterMice.
+
Paintbox ze sterownikiem myszy.[https://enterpriseforever.com/programming/issues-on-paintbox/?action=dlattach;attach=14697]
 +
 
 +
[[File:Paintbox.png]]
 +
 
 +
Enterprise Graphical Interface (EGI) ze sterownikiem myszy.[https://enterpriseforever.com/other-topics/enterprise-graphical-interface/?action=dlattach;attach=14742]
 +
 
 +
[[File:EGI.JPG]]
 +
 
 +
SymbOS wewnętrznie, w trybie podstawowym EnterMice (modyfikacja przez 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]]
  
 
Programy w Basicu mogą korzystać ze sterownika myszy.
 
Programy w Basicu mogą korzystać ze sterownika myszy.
Line 63: Line 73:
 
Stare programy używające joysticka w porcie 1, z EnterMice w trybie emulacji joysticka.
 
Stare programy używające joysticka w porcie 1, z EnterMice w trybie emulacji joysticka.
  
EPDOS 2.X wewnętrznie, tylko z kartą portu szeregowego.
+
[http://www.ep128.hu/Ep_Util/Edcw.htm EDC Windows], wewnętrznie w trybie EnterMice oraz jako driver w trybie Hsoft. Użyj zmodyfikowanych plików: [https://enterpriseforever.com/programming/entermice-option-on-edcw/?action=dlattach;attach=16307]
 +
 
 +
[[File:edcw.png]]
 +
 
 +
SPEmu128 autorstwa geco, doskonały emulator ZX Spectrum dla Enterprise, umożliwia emulację myszy Kempston [http://velesoft.speccy.cz/kmsoft.htm] wykorzystując informacje o ruchach myszki z interfejsu EnterMice. Lista kompatybilnych gier stale rośnie.[https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=15834]
 +
 
 +
[[File:moorhun.png]]
 +
 
 +
===Lista gier===
 +
 
 +
Pasziansz(Pasjans) [https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=16014]. Wersja 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 First person shoot'em up. Konwersja z ZX Spectrum przez Geco[https://enterpriseforever.com/letoltesek-downloads/egyeb-misc/?action=dlattach;attach=16889]
 +
 
 +
[[File:Wolf2004.png]]
 +
 
 +
Bricky Prise. Gra stworzona przez Geco, Endi i Szipucsu. Adaptacja dla EnterMice przez Isvan-V. [https://enterpriseforever.com/enterprise-devcompo-1-37/enterprise-program-bricky-prise/?action=dlattach;attach=16580] i [https://enterpriseforever.com/enterprise-devcompo-1-37/enterprise-program-bricky-prise/?action=dlattach;attach=16581]
 +
 
 +
[[File:bricky.png]]
 +
 
 +
Pięć w rzędzie. Gra strategiczna napisana w BASIC. Adaptacja dla EnterMice przez Lacika. [https://enterpriseforever.com/programozas/basic/?action=dlattach;attach=16867]
 +
 
 +
[[File:Fiverow.jpg]]
 +
 
 +
Chess Master 2000 skonwertowana z Amstrada CPC przez Geco[https://enterpriseforever.com/letoltesek-downloads/cpc-jatekok-ep-konverzioi-games-converted-from-cpc/?action=dlattach;attach=16271]
 +
 
 +
[[File:Cm2000.JPG]]
 +
 
 +
===Emulatory XEP128 i EP128emu===
 +
Nawet jeśli nie masz interfejsu EnterMice, możesz przetestować sterowanie myszką na emulatorze Enterprise. Doskonały emulator XEP128[http://xep128.lgb.hu/] autorstwa LGB umożliwia naśladowanie interfejsu z użyciem myszki komputera PC. Możesz również wypróbować emulację ZX Spectrum przez SPEmu128 na emulowanym Enterprise. Mysz Kempston będzie wówczas sterowana myszką komputera PC ...
 +
 
 +
Tutaj [https://enterpriseforever.com/emulators/xep128-1331/msg56458/#msg56458] wyjaśnienie w jaki sposób skonfigurować emulator XEP128, aby prawidłowo pracował na PC z systemem Windows.
 +
 
 +
W tym miejscu[https://github.com/lgblgblgb/xep128/wiki/Installing] opis konfiguracji dla systemu OSX.
 +
 
 +
 
 +
 
 +
Dzięki pracy LGB nad jego emulatorem XEP128, również IstvanV zaktualizował swój EP128emu dodając emulację EnterMice. Dostępny jest prosty instalator dla systemu Windows.
 +
 
 +
Aktualną wersję można pobrać tutaj [https://github.com/istvan-v/ep128emu/releases].
  
 
==Opis ogólny==
 
==Opis ogólny==
Line 79: Line 134:
 
Bezpieczniej jest wykonać wszystkie podłączenia przy wyłączonym zasilaniu.
 
Bezpieczniej jest wykonać wszystkie podłączenia przy wyłączonym zasilaniu.
  
==Connecting to a computer==
+
<span style="color: red; font-size: 1.7em; font-family: calibri">Uwaga:</span> Zanim podłączysz jakiekolwiek urządzenie, dla którego interfejs EnterMice nie został zaprojektowany, przeczytaj proszę rozdział [[EnterMice_(Polski)#Podłączanie_innych_urządzeń_do_EnterMice|"Podłączanie innych urządzeń do EnterMice"]].
The interface board should be connected at the same time to 3 edge connectors on the back of your Enterprise: Control 1, Control 2 and Serial. You can see that the edge connectors are soldered in a slightly greater angle than 90 degrees. That is intentional to ensure the Entermice fits better the back shape of the Enterprise.
+
 
 +
==Podłączenie do komputera==
 +
Płytka interfejsu jest podłączona jednocześnie do trzech złączy krawędziowych z tyłu komputera: Control 1, Control 2 oraz Serial. Złącza w interfejsie są zamontowane pod kątem nieco większym niż 90°. Jest to celowe, aby zapewnić lepsze dopasowanie interfejsu do złącz Enterprise.
  
It can be inserted only one way, but the contact pins might not seat centered on the fingers of the edge connectors. If so, the contact might be unstable and the computer and/or the interface may not work.
+
Możliwe jest podłączenie tylko w jeden sposób, jednak może się zdarzyć, że styki nie trafią centralnie w kontakty złącza krawędziowego. Jeśli tak się stanie połączenie może być niestabilne i komputer i/lub interfejs mogą nie pracować prawidłowo.
  
Properly connected, the interface works right after turning on the power.
+
Właściwie podłączony interfejs działa prawidłowo od razu po załączeniu zasilania komputera.
  
After turning on, a self-test is performed, during which both red and green LEDs will flash 3 times (regardless of the state of dip-switch 3).
+
Po uruchomieniu wykonywany jest self-test interfejsu, podczas którego obie diody LED błyskają 3 razy (bez względu na ustawienie przełącznika DS3).
  
Once the Entermice is connected to the Enterprise, although it is advisable to plug the mouse before turning on, the interface is provided with a hot-plug feature that recognizes when a mouse is connected, then it is classified and initialised to work.
+
Po podłączeniu EnterMice do komputera, zalecane jest podłączenie myszki przed załączeniem zasilania. Mimo to interfejs posiada funkcję hot-plug umożliwiającą rozpoznanie podłączenia myszki w trakcie pracy, wówczas jest ona identyfikowana i przygotowywana do pracy (trwa to około 2-3 sekund).
  
After successful completion of the mouse initialization, the green LED lights up (if DS3 is ON).
+
Pomyślne zakończenie inicjalizacji myszki sygnalizowane świeceniem zielonej diody LED (jeśli przełącznik DS3 jest ustawiony w pozycji ON).
  
==Features==
+
==Funkcje==
The interface can operate in several modes. To configure it, a five sectional dip-switch is provided.
+
Interfejs posiada kilka trybów pracy. Do konfiguracji służy pięcio-sekcyjny przełącznik (DS).
  
The configuration settings can be changed during operation of the interface. You do not have to restart your computer.
+
Ustawienia konfiguracji mogą być zmieniane podczas pracy interfejsu. Nie jest wymagane wyłączanie ani restartowanie komputera.
  
Below is the description of all possible settings.
+
Poniżej opis wszystkich możliwych ustawień.
  
 
{|class="wikitable"
 
{|class="wikitable"
 
!DS1
 
!DS1
 
!DS2
 
!DS2
!Work mode
+
!Tryb pracy
 
|-
 
|-
 
!scope="col"|ON||scope="col"|ON
 
!scope="col"|ON||scope="col"|ON
|EnterMice native mouse mode
+
|Podstawowy tryb myszy EnterMice
 
|-
 
|-
 
!scope="col"|OFF||scope="col"|ON
 
!scope="col"|OFF||scope="col"|ON
|BoxSoft compatible mouse mode. The two main buttons are swapped. Main now is the right one.
+
|Tryb myszy zgodny z BoxSoft. Przyciski myszy są odwrócone. Głównym przyciskiem jest prawy przycisk myszy.
 
|-
 
|-
 
!scope="col"|OFF||scope="col"|OFF
 
!scope="col"|OFF||scope="col"|OFF
|EnterMice joystick mode (Movement made to the mouse is redirected to the input of Joystick 1, and that port is disabled)
+
|Tryb emulacji joysticka (ruchy myszy są przekierowane do portu Control 1, złącze Joystick 1 zostaje odłączone)
 
|-
 
|-
 
!scope="col"|ON||scope="col"|OFF
 
!scope="col"|ON||scope="col"|OFF
|not used (in fact EnterMice as joystick on KB K column)
+
|nie używane (faktycznie EnterMice emuluje joystick w kolumnie K klawiatury)
 
|}
 
|}
Joystick 2 always works the same way, regardless of the interface operating mode being selected.
+
Złącze Joystick 2 działa zawsze w ten sam sposób, niezależnie od wybranego trybu pracy interfejsu.
  
  
 
{|class="wikitable"
 
{|class="wikitable"
 
!DS3
 
!DS3
!LED status
+
!Kontrolki LED
 
|-
 
|-
 
!scope="col"|OFF
 
!scope="col"|OFF
|LED status disabled
+
|Wyłączone
 
|-
 
|-
 
!scope="col"|ON
 
!scope="col"|ON
|LED status enabled
+
|Załączone
 
|}
 
|}
  
  
Joystick emulation mode configuration
+
Konfiguracja trybu emulacji joysticka
 
{|class="wikitable"
 
{|class="wikitable"
 
!DS4
 
!DS4
!Sensitivity
+
!Czułość
 
|-
 
|-
 
!scope="col"|OFF
 
!scope="col"|OFF
|Normal
+
|Normalna
 
|-
 
|-
 
!scope="col"|ON
 
!scope="col"|ON
|High
+
|Podwyższona
 
|}
 
|}
 
{|class="wikitable"
 
{|class="wikitable"
 
!DS5
 
!DS5
!Diagonal correction
+
!Korekcja ruchów ukośnych
 
|-
 
|-
 
!scope="col"|OFF
 
!scope="col"|OFF
|Disable
+
|Wyłączona
 
|-
 
|-
 
!scope="col"|ON
 
!scope="col"|ON
|Enable
+
|Załączona
 
|}
 
|}
Diagonal correction improves the precision of joystick simulation on diagonal movements, at the expense of a slight decrease in speed.
+
Korekcja ruchów ukośnych poprawia precyzję emulacji joysticka dla ruchów po skosie kosztem niewielkiego zmniejszenia prędkości.
 +
 
 +
==Korzystanie ze sterownika==
  
==Use of the driver==
+
W [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=16294 tym miejscu] znajdziesz sterownik myszy.
  
Here [https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=14223] you can find the driver.
+
Poniższy tekst pochodzi z oryginalnej instrukcji obsługi Paintbox, poprawionej i uzupełnionej o nowe możliwości EnterMice.  
  
  
The following instructions have been took from the original Paintbox manual, corrected and then added the EnterMice new abilities.
+
===Jak używać myszy we własnych programach ?===
  
 +
Korzystanie z myszy nie jest zarezerwowane wyłącznie dla programów w kodzie maszynowym. Łatwo można dodać obsługę myszy niemal do każdego programu w BASIC'u. W tym celu konieczne jest użycie rozszerzenia EXOS nazywanego sterownikiem myszy ("MOUSE.XR").
  
 +
Sterownik ten umieści wskaźnik myszy na dowolnym ekranie graficznym lub tekstowym i będzie odzwierciedlał ruchy myszy poprzez przemieszczanie kursora po ekranie.
 +
Kursor w trybie tekstowym działa wewnętrznie z dokładnością do piksela, ale rysowany jest w obrębie pojedynczego znaku, więc może się poruszać skokowo na krótkich dystansach.
  
===The mouse and how to use it in your programs===
+
Sterownik myszy może wykonywać różne polecenia i funkcje, na przykład włączyć lub wyłączyć kursor. Istnieją dwie metody komunikacji ze sterownikiem, pierwsza przez bezpośredni odczyt i zapis, druga z pośrednictwem zmiennych systemowych.
  
 +
====Ładowanie sterownika====
  
Using the mouse is not just restricted to machine-code programs, it can be very easily incorporated within almost any Basic program. For this is necessary the use of an EXOS Extension named mouse driver("Mouse.xr").
+
Sterownik myszy może być załadowany dowolną metodą, tj; "START" z poziomu BASIC (jeśli z taśmy) lub LOAD "MOUSE.XR". Może też być załadowany z "WP", z EXDOS lub jakiegokolwiek innego języka (sprawdź szczegółowy opis dla odpowiedniego języka).
  
This device driver will place a pointer on any graphic screen and by monitoring the movements of the mouse it will move the pointer around the screen in sync with it.
+
Po załadowaniu sterownik pozostanie w pamięci (program rezydentny) do następnego restartu lub wyłączenia komputera.
  
The Mouse Driver can be instructed to do various commands and functions, for example turning the pointer on and off. There are two ways to communicate with the Mouse Driver, the first is by reading and writing to it and the second is by system variables.
+
We wcześniejszych wersjach, do poprawnej pracy, konieczna była inicjalizacja za pomocą polecenia EXOS ":PB". EGI i Paintbox wykonują tę operację wewnętrznie.
  
====Loading====
+
Jeśli korzystasz ze starszej wersji, nigdy nie wykonuj inicjalizacji więcej niż raz. Przy drugiej próbie komputer się zawiesi. Zignoruj ​​komunikat o błędzie, który się pojawi. Kod błędu (otrzymywany w BASIC z EXTYPE) to 9000+strona pamięci, do której został załadowany sterownik. Zostało to zrobione ceolowo przez autorów sterownika.
  
 +
Bieżąca wersja wykonuje ​​automatyczną inicjalizację, ale również poprawnie współpracuje ze starszymi programami (EGI i Paintbox), które nadal mogą bezproblemowo używać usuniętego polecenia :PB.
  
The Mouse Driver can be loaded by all methods ie; "START" from Basic (if from tape) or load "MOUSE.XR". It can also be loaded from the "WP", from EXDOS or from any other language (check appropriate language for details).
+
Wielokrotne ładowanie sterownika nie jest szkodliwe, ale ponieważ tylko ostatni załadowany będzie pracował, marnuje się pamięć.
  
Once loaded it will remain resident until the next hard reset or switch off of the computer.
+
Poniżej prosta procedura w BASIC-u pozwalająca wykryć czy sterownik został już załadowany:
  
Then, to properly work it is necessary to initialize it with the EXOS command ":PB". The EGI and Paintbox do this internally
+
100 WHEN EXCEPTION USE DRIVER_LOADING
 +
110      SET 189,4 ! próba ustawienia trybu pracy EnterMice jest możliwa tylko gdy sterownik jest załadowany
 +
120 END WHEN
  
Ignore the error message it gives. The error code(obtained in Basic with EXTYPE) is 9000+memory page where the driver has been loaded. This was made deliberately by the driver writers.
 
  
A version that auto-initialises itself can be provided if requested, but then it will not work with the EGI or Paintbox, only in Basic.
+
1000 HANDLER  DRIVER_LOADING
 +
1010      EXT "LOAD MOUSE.XR" ! plik sterownika powinien się znajdować w bieżącym katalogu, jeśli się tam nie znajduje, otrzymamy błąd
 +
1020      PRINT "Loading the Mouse Driver"
 +
1030      SET 189,4                  ! tutaj otrzymujemy potwierdzenie, że sterownik został prawidłowo zainstalowany
 +
1040 END HANDLER
  
Never load two instances of the driver nor execute two times the initialization command, as it can hang the Enterprise.
+
Sprawdzenie można wykonać również w bardziej skomplikowany i skuteczny sposób ustawiając zmienną sygnalizującą status "sterownik niezaładowany", a następnie załadować sterownik w głównym programie. Wówczas, jeśli plik sterownika nie zostanie odnaleziony (prawdopodobnie znajduje się w innym katalogu), to błąd może być rozpoznany w tym samym lub kolejnym podprogramie obsługi.
  
 +
Dobrą praktyką jest zapobieganie wielokrotnemu instalowaniu sterownika myszy.
  
Executing ":MOUSE" it will show some version information of the driver and, if a Entermice is plugged it also will show Entermice information.
+
Wykonanie polecenia ":HELP MOUSE" wyświetla informacje o wersji sterownika, a jeśli wykryty zostanie interfejs EnterMice, to wyświetlone zostaną dodatkowe informacje: identyfikator podłączonej myszki, wersja sprzętu i frimware.
  
====Communicating with the mouse driver====
+
====Komunikacja ze sterownikiem myszki====
  
  
As stated above there are two ways in which you can communicate with the Mouse Driver. To demonstrate the two methods and their actions, we shall first look at all the commands, functions and variables then demonstrate their use within a program.
+
Jak wspomniano powyżej, istnieją dwa sposoby komunikacji ze sterownikiem myszki. Aby zaprezentować obie metody i ich działanie, powinniśmy najpierw poznać wszystkie polecenia, funkcje i zmienne, a następnie pokazać sposoby ich użycia w programie.
  
====Printed commands and functions====
+
====Polecenia i funkcje drukowania====
  
  
The first and most important action is to open the Mouse channel, ie OPEN £?:"MOUSE:" (? being a channel number).  
+
Pierwszą i najważniejszą czynnością jes otwarcie kanału myszki, np. OPEN £<b><i>n</i></b>:"MOUSE:" (<b><i>n</i></b> oznacza numer kanału).  
  
Commands issued by printing characters to Mouse channel:
+
Trzeba pamiętać, że kanał myszki jest zawsze powiązany z kanałem wideo, na którym wyświetlany jest wskaźnik.
 +
Otwarcie kanału myszki bez kanału wideo jest niemożliwe. Jeśli kanał wideo zostanie zamknięty lub zmieniony, podczas gdy kanał myszki jest otwarty, procedura obsługi myszy wykryje to i się dezaktywuje. Kanał myszy pozostanie otwarty, ale nie będzie działał. Aby tego uniknąć w programie, w pierwszej kolejności należy zamykać kanał myszy, a dopiero potem kanał wideo.
 +
 
 +
Również po zatrzymaniu przez STOP programu w Basic'u zawsze wykonaj polecenie CLOSE £? przed wykonaniem polecenia TEXT,
 +
ponieważ edytor Basic automatycznie zamyka kanał wideo trybu graficznego.
 +
 
 +
Polecenia wydawane przez drukowanie do kanału myszki:
 
{|class="wikitable"
 
{|class="wikitable"
 
!scope="col"|O
 
!scope="col"|O
|Turn pointer on
+
|Pokaż wskaźnik myszki na ekranie
 
|-
 
|-
 
!scope="col"|o
 
!scope="col"|o
|Turn pointer off
+
|Ukryj wskaźnik myszki
 
|-
 
|-
 
!scope="col"|P
 
!scope="col"|P
|Request X & Y position
+
|Pobierz współrzędne X i Y
 
|}
 
|}
  
Results or status obtained by reading a character from Mouse channel:
+
Wyniki lub stany uzyskiwane przez odczyt znaków z kanału myszki:
  
Only read after sending "P":
+
Odczyt tylko po wcześniejszym przesłaniu "P":
  
 
{|
 
{|
|X||Low byte
+
|X||Młodszy bajt
 
|-
 
|-
|X||High  byte
+
|X||Starszy bajt
 
|-
 
|-
|Y||Low byte
+
|Y||Młodszy bajt
 
|-
 
|-
|Y||High byte
+
|Y||Starszy bajt
 
|}
 
|}
  
Always readable:
+
Zawsze możliwe do odczytu:
  
Fire = "1" if main button depressed, "0" if not.
+
Fire = "1" jeśli główny (prawy) przycisk wciśnięty lub "0" w przeciwnym wypadku.
  
====System variables====
+
====Zmienne systemowe====
 
{|class="wikitable"
 
{|class="wikitable"
!Address
+
!Adres
!Content
+
!Zawartość
!Default
+
!Wartość domyślna
 
|-
 
|-
|style="text-align:center"|180||Video channel, pointer required on||style="text-align:right"|101
+
|style="text-align:center"|180||Kanał wideo, wymagany do pokazania wskaźnika myszy||style="text-align:right"|101
 
|-
 
|-
|style="text-align:center"|181||Position of X,Y co-ordinate on status line||style="text-align:right"|30
+
|style="text-align:center"|181||Pozycja współrzędnych X,Y w linii statusu||style="text-align:right"|30
 
|-
 
|-
|style="text-align:center"|182||Status co-ordinate display: 1 on, 0 off||style="text-align:right"|0
+
|style="text-align:center"|182||Współrzędna wyświetlania stanu: 1 załączony, 0 wyłączony||style="text-align:right"|0
 
|-
 
|-
|style="text-align:center"|183||Colour of pointer {check tech section}||style="text-align:right"|255
+
|style="text-align:center"|183||Kolor wskaźnika myszy (patrz [[EnterMice_(Polski)#Wartości_zmiennej_EXOS_183_do_zmiany_koloru_wskaźnika_myszy|informacje techniczne]] poniżej)||style="text-align:right"|255
 
|-
 
|-
|style="text-align:center"|184||Low byte of X co-ordinate||
+
|style="text-align:center"|184||Młodszy bajt współrzędnej X||
 
|-
 
|-
|style="text-align:center"|185||High byte of X co-ordinate. Check demo prog. for co-ordinate conversion.||
+
|style="text-align:center"|185||Starszy bajt współrzędnej X. W dalszej części znajdziesz [[EnterMice_(Polski)#Jak_użyć_kółka_i_dodatkowych_przycisków_we_własnych_programach_?|przykładowy program]] przeliczania współrzędnych.||
 
|-
 
|-
|style="text-align:center"|186||Low byte of Y co-ordinate||
+
|style="text-align:center"|186||Młodszy bajt współrzędnej Y||
 
|-
 
|-
|style="text-align:center"|187||High byte of Y co-ordinate||
+
|style="text-align:center"|187||Starszy bajt współrzędnej Y||
 
|-
 
|-
|style="text-align:center"|188||Status of fire button 0 off, 1 on||
+
|style="text-align:center"|188||Stan przycisku 0 zwolniony, 1 wciśnięty||
 
|-
 
|-
|style="text-align:center"|189||Input device:
+
|style="text-align:center"|189||Urządzenie wejściowe:
   0 - Internal Joystick
+
   0 - Wewnętrzny joystick            2 przyciski, Spacja i Enter
   1 - Control 1
+
   1 - Joystick w porcie Control 1     3 przyciski
   2 - Control 2
+
   2 - Joystick w porcie Control 2     3 przyciski
   3 - Boxsoft
+
   3 - Mysz BoxSoft                    2 do 5 przycisków
   4 - EnterMice (default)
+
   4 - EnterMice (domyślne ustawienie) 2 do 5 przycisków
   5 - Serial Mouse Sytems
+
   5 - Mysz szeregowa Mouse Sytems     3 przyciski
   6 - Serial Microsoft on a future release(actually 6 acts the same as 5)
+
   6 - Mysz szeregowa Microsoft       2 przyciski
   >6 - Not implemented
+
   >6 - nie zaimplementowane
 
|
 
|
 
|-
 
|-
|style="text-align:center"|190||Status of secondary button and spare buttons if present, counter of wheel if present.
+
|style="text-align:center"|190||Stan drugiego i pozostałych przycisków, jeśli są obecne oraz licznik kółka, jeśli jest.
   Bits 0 to 3 signed nibble of the wheel counter(7 -> -8)  
+
   Bity 0 do 3 wartość z przedziału -8 do 7 (4 bity ze znakiem)
   Bit 4 wheel button
+
   Bit 4 przycisk pod kółkiem lub środkowy
   Bit 6 and 5 spare buttons
+
  Bit 5 przycisk 4.
   Bit 7 secondary button
+
   Bit 6 przycisk 5.
       Status of buttons: 0 off, 1 on
+
   Bit 7 drugi przycisk (lewy)
 +
       Stan przycisków: 0 zwolniony, 1 wciśnięty, jeśli obecny jest trzeci przycisk, jego stan jest przypisany do bitu 4
 
|
 
|
 
|}
 
|}
  
====Examples====
+
====Przykłady====
 +
[https://enterpriseforever.com/programming/universal-mouse-driver/?action=dlattach;attach=14678 download]
  
 
  100 PROGRAM "ms_test.bas"
 
  100 PROGRAM "ms_test.bas"
Line 307: Line 385:
 
  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:
+
Teraz należy dodać funkcję MOUSE_POS. Zwraca ona pozycję wskaźnika myszy. Wybierz jedną z dwóch możliwości:
  
Reading the pointer co-ordinates by reading from Mouse channel.
+
Odczytaj współrzędne wskaźnika z kanału myszy:
  
 
  DEF MOUSE_POS
 
  DEF MOUSE_POS
Line 321: Line 399:
 
  END DEF
 
  END DEF
  
Reading the pointer co-ordinates from the system variables.
+
lub odczytaj współrzędne wskaźnika ze zmiennych systemowych:
  
 
  DEF MOUSE_POS
 
  DEF MOUSE_POS
Line 335: Line 413:
 
  END DEF
 
  END DEF
  
You can also command the driver to put the pointer where you want:
+
Możesz również skorzystać z polecenia sterownika, aby umieścić wskaźnik myszy w dowolnym miejscu na ekranie:
  
Setting the Mouse co-ordinates by the system variables.
+
Współrzędne wskaźnika ustaw poprzez zmienne systemowe.
  
 
  DEF POS_MOUSE
 
  DEF POS_MOUSE
Line 352: Line 430:
 
  END DEF
 
  END DEF
  
 +
To bardzo prosty program graficzny; pozwala rysować linie za pomocą ruchów myszki,
 +
gdy przycisk jest wciśnięty,
 +
Funkcja MOUSE_POS jest wywoływana w linii 150. W zależności od tego jak chcesz odczytać położenie wskaźnika myszy, użyj jednej z dwóch przedstawionych powyżej wersji funkcji.
 +
 +
Kolejna pokazana procedura pozwala na ustawienie położenia wskaźnika myszy.
 +
Po prostu wywołaj procedurę podając współrzędne X oraz Y.
 +
 +
Eksperymentuj z różnymi funkcjami i procedurami i próbuj dodawać je do własnych programów.
 +
Nawet nie zauważysz jak szybko odkryjesz, że dodanie obsługi myszki do istniejącego programu, czy też napisanie nowego programu z jej wykorzystaniem jest bardzo proste.
 +
 +
====Jak użyć kółka i dodatkowych przycisków we własnych programach ?====
  
This program is a very simple art program; simply drawing a line to
+
Operowanie na bitach w BASIC-u Enterprise jest powolne i skomplikowane. Zmienna systemowa 190 zawiera wiele informacji, ale nie są łatwe do wydobycia:
follow the movement of the mouse when the "Mouse Button" is
 
pressed. A call is made to MOUSE_POS on line 150, depending on
 
how you want to read it you should add into the program the
 
appropriate procedure from the two listed. There is another
 
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====
+
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
  
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:
+
Wewnątrz programu w BASIC-u możesz użyć procedury w kodzie maszynowym, aby rozbić te informacje na pięć bajtów. Dodatkowo procedura zeruje licznik Z po każdym jej wywołaniu:
  
 
  100 ALLOCATE 42
 
  100 ALLOCATE 42
Line 388: Line 480:
 
   
 
   
  
Here is the disassembly of the machine code routine:
+
Procedura w assemblerze:
  
 
  ORG: jr CODE  ;hl contains the ORG address
 
  ORG: jr CODE  ;hl contains the ORG address
Line 427: Line 519:
 
   
 
   
  
This is an explanation of the procedure to program the wheel:
+
Poniżej wyjaśnienie działania procedury obsługi kółka:
  
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.
+
Młodszy półbajt zmiennej systemowej 190 zawiera licznik impulsów odwbranych z kółka od chwili jego ostatniego zerowania. Impulsy mogą być dodatnie lub ujemne, sterownik dodaje lub odejmuje je od stanu licznika, a następnie przechowuje wartość w przedziale od -8 do 7. Główny program powinien zapewnić cykliczne wywoływanie procedury odczytu licznika (z XPLOD). Po wywołaniu licznik jest zerowany (również w procedurze XPLOD), a odczytane wartości znajdują się pod adresem (XPLOD+6) i mogą być wykorzystane na przykład do przewijania zawartości ekranu.
  
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):
+
Zauważ, że drugi przycisk myszy jest podłączony oddzielnym przewodem i jego stan może być odczytany bezpośrednio z matrycy klawiatury (z użyciem procedury opisanej w sekcji "[[EnterMice_(Polski)#Odczyt_stanu_joysticków|Odczyt stanu joysticków]]") lub łatwiej przez porównanie zmiennej 190 z wartością 127 (stan drugiego przycisku znajduje się w bicie 7):
  
 
  ASK 190 SECBUTT
 
  ASK 190 SECBUTT
 
  IF SECBUTT>127 THEN GOTO MENU !secondary mouse button pressed!!!
 
  IF SECBUTT>127 THEN GOTO MENU !secondary mouse button pressed!!!
  
===Driver technical information===
+
===Informacje techniczne o sterowniku===
 
 
Executing the HELP command in EXOS you can see the version of the driver in a list that shows all the extensions.
 
  
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.  
+
Wywołanie polecenia HELP w EXOS pozwala wyświetlić na ekranie listę wszystkich rozszerzeń i wersji sterowników.
  
 +
Sterownik myszy działa w trybach graficznych i tekstowych. Planowana w trybie edytora, co pozwoli na wywoływanie akcji po przyciśnięciu przycisku, z uwzględnieniem położenia wskaźnika myszy na ekranie. Wówczas użycie myszki stanie się łatwiejsze na przykład w edytorze BASIC, WP czy EXDOS.
  
====Values for EXOS variable 183 to change mouse pointer colour====  
+
====Wartości zmiennej EXOS 183 do zmiany koloru wskaźnika myszy====  
  
 
{|class="wikitable"
 
{|class="wikitable"
!rowspan=2|SETTING
+
!rowspan=2|Ustawienie
!colspan=2|RESULTANT
+
!colspan=2|Wynik
 
|-
 
|-
!INK
+
!Kolor
!COLOUR
+
!Numer
 
|-
 
|-
|rowspan=2 style="text-align:center"|2 COLOUR MODE
+
|rowspan=2 style="text-align:center"|Tryb 2-kolorowy
 
|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"|Tryb 4-kolorowy
 
|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 466: Line 557:
 
|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"|Tryb 16-kolorowy
 
|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 499: Line 590:
 
|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"|Tryb 256 kolorów||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====
+
====Tryb emulacji joysticka za pomocą myszy====
 
 
  
A mouse plugged on the EnterMice PS/2 port is not just restricted to acting as a mouse, it can
+
Mysz podłączona do portu PS/2 EnterMice nie jest ograniczona wyłącznie do pracy jako typowa mysz, lecz może również symulować joystick.
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.
+
Ten tryb pracy aktywuje się ustawiając oba przełączniki DS1 oraz DS2 w pozycję OFF. Od tej chwili interfejs konwertuje ruchy myszki z portu PS/2 na przechylenia joysticka w porcie Joy 1. Nie trzeba odłączać wtyczki prawdziwego joysticka z tego portu, zostanie on wyłączony. Mysz będzie przekazywać ruchy tak jak joystick, co może być przydatne w przypadku starszych programów i gier.
  
If DS3 is ON, in joystick mode lights up red LED. It's blinking when any direction-contact is shorted.
+
Jeśli przełącznik DS3 jest w pozycji ON, to czerwona dioda LED będzie sygnalizować aktywny tryb joysticka. Dioda przygasa na czas, gdy którykolwiek ze styków kierunkowych w porcie joysticka zostanie zwarty.
  
NOTE: The fire button is the left hand button on the mouse. To make use of the right hand button
+
UWAGA: Przycisk Fire jest lewym przyciskiem myszki. Aby skorzystać z prawego przycisku użyj procedur pokazanych w sekcji dotyczącej [[EnterMice_(Polski)#Jak_użyć_kółka_i_dodatkowych_przycisków_we_własnych_programach_?|interfejsu myszki]].
use the routines shown in the section on the mouse interface.
 
  
====The joystick ports====
+
====Porty joysticków====
  
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 jest nie tylko interfejsem myszki, ale również umożliwia podłączenie dwóch joysticków standardu ATARI-Kempston-Amiga bez konieczności stosowania dodatkowych adapterów. Obsługiwana jest opcja autofire, jeśli joystick jest w nią wyposażony. Mysz i oba joysticki mogą być podłączone jednocześnie w tym samym czasie. Nie zakłócają się nawzajem.
  
====Reading the joystick interface====
+
====Odczyt stanu joysticków====
  
 +
Oryginalnie porty Control w Enterprise mają po jednym przycisku Fire, ale w interfejsie EnterMice obsługiwane są po dwa dodatkowe przyciski na każdy port. Oczywiście nie będą one działać w starych grach, ale można je wykorzystać w nowych produkcjach lub nowych konwersjach gier.
  
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.  
+
Wszystkie sposoby odczytu obu portów działają normalnie. Potrzebny jest tylko dodatkowy kod do odczytu dodatkowych przycisków Fire 2 i 3. Przykładowy kod poniżej.
 
 
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.
 
  
  
Line 535: Line 623:
  
  
This is the disassembly of that little code:
+
Krótka procedura w assemblerze:
  
  
Line 550: Line 638:
 
                           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)
+
Możesz odczytać stan trzech przycisków Fire z obu portów joysticków EnterMice modyfikując linię BASIC-a "140 LET FIRE2=USR(FIRE,4)". Zastąp "4" przez "1" lub "2" (H=0). Dla drugiego portu użyj wartości "1281", "1282" lub "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.
+
Tą metodą można również odczytać stan dwóch przycisków myszy, które są współdzielone z przyciskami Fire pierwszego joysticka.
  
==Troubleshooting==
+
==Znane problemy==
===Keyboard issue===
+
===Błędy klawiatury===
[[File:KbdIssue1.jpg|thumb|200px|Figure 1]]
+
[[File:KbdIssue1.jpg|thumb|200px|Rysunek 1]]
[[File:KbdIssue2.jpg|thumb|200px|Figure 2]]
+
[[File:KbdIssue2.jpg|thumb|200px|Rysunek 2]]
[[File:KbdIssue3.jpg|thumb|200px|Figure 3]]
+
[[File:KbdIssue3.jpg|thumb|200px|Rysunek 3]]
[[File:KbdFixer.jpg|thumb|200px|Keyboard fixer (visualisation)]]
 
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...
+
Podczas tworzenia interfejsu EnterMice, przypadkowo odkryty został poważny błąd w konstrukcji komputera Enterprise.
  
The issue is about interferences on KB0..KB9 ports from keyboard, that are also utilised by the control ports.
+
Nie ujawnia się on dopóki nic nie jest podłączone do portów Control 1 i Control 2. Jednakże EnterMice z nich korzysta ...
  
If only one key is pressed at the keyboard, then nothing wrong happens (see figure 1).
+
Problem polega na zakłócaniu linii KB0..KB9 portu klawiatury, które przenoszą się również na porty Control.
  
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).
+
Jeśli tylko jeden klawisz jest wciśnięty, wtedy nic się nie dzieje (rys. 1).
  
The Enterprise lacks blocking return diodes to separate the rows of the keyboard!
+
Jednak, jeśli jednocześnie wciśnięte zostaną dwa klawisze w tej samej kolumnie, to sygnał z wybranej linii klawiatury przedostanie się bez przeszkód na sąsiednią linię (rys. 2).
  
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.
+
Enterprise nie posiada diod blokujących, które separowały by od siebie linie klawiatury !
  
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).
+
Od strony elektrycznej nie ma żadnego zagrożenia (dekoder LS145 wewnątrz komputera posiada wyjścia z otwartym kolektorem), ale odczyty z portów Control 1 i Control 2 są błędne.
  
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.
+
W celu wyeliminowania przyczyny należy dodać diody do każdej z linii klawiatury w Enterprise. Zapobiegnie to powstawaniu "kolizji" podczas wciskania jednocześnie więcej niż jednego klawisza (rys. 3).
 +
 
 +
Pear przygotował płytkę PCB rozwiązującą problem. Bez tej poprawki, aby zapobiec błędom, należy unikać wciskania wielu klawiszy jednocześnie podczas korzystania z joysticków i myszki.
 +
 
 +
[[File:KbdFixer.jpg|200px|Keyboard fixer (wizualizacja)]]
 +
[[File:KbdFixerView.jpg|300px|Keyboard fixer]]
 +
[[File:KbdFixerInside.jpg|300px|Keyboard fixer wewnątrz Enterprise]]
 +
[[File:KbdFixerConnected.jpg|300px|Klawiatura podłączona poprzez fixer]]
  
 
===Microsoft Optical Mouse===
 
===Microsoft Optical Mouse===
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.
+
Mysz PS/2 Microsoft Optical Mouse jest szczególnym przypadkiem. Po pierwsze powinna być podłączana wyłącznie przy użyciu oryginalnego adaptera Microsoft USB - PS/2. Po drugie działa poprawnie z interfejsem EnterMice, jeśli zostanie podłączona przed załączeniem zasilania. W tym jednym przypadku nie można korzystać z opcji hot-plug, ponieważ mysz nie zostanie rozpoznana.
  
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).
+
EnterMice potrafi wymusić rozpoznanie myszy Microsoft przy załączonym zasilaniu, ale wymaga to chwilowego zwarcia styków RESET interfejsu lub naciśnięcia przycisku RESET w przypadku nowszej wersji płytki (restartowany jest wyłącznie interfejs, nie komputer).
  
==Technical specification==
+
==Specyfikacja techniczna==
===Joystick port pinout===
+
===Port joysticka===
 
{|class="wikitable"
 
{|class="wikitable"
!pin
+
!styk
!signal
+
!sygnał
 
|-
 
|-
|style="text-align:center"|1||style="text-align:center; width: 100px"|Up
+
|style="text-align:center"|1||style="text-align:center; width: 100px"|Góra
 
|-
 
|-
|style="text-align:center"|2||style="text-align:center"|Down
+
|style="text-align:center"|2||style="text-align:center"|Dół
 
|-
 
|-
|style="text-align:center"|3||style="text-align:center"|Left
+
|style="text-align:center"|3||style="text-align:center"|Lewo
 
|-
 
|-
|style="text-align:center"|4||style="text-align:center"|Right
+
|style="text-align:center"|4||style="text-align:center"|Prawo
 
|-
 
|-
 
|style="text-align:center"|5||style="text-align:center"|Fire 3
 
|style="text-align:center"|5||style="text-align:center"|Fire 3
Line 607: Line 700:
 
|style="text-align:center"|9||style="text-align:center"|Fire 2
 
|style="text-align:center"|9||style="text-align:center"|Fire 2
 
|}
 
|}
===Control Map===
+
 
 +
===Matryca połączeń===
 
{|class="wikitable"
 
{|class="wikitable"
 
!colspan=2 rowspan=2|
 
!colspan=2 rowspan=2|
!colspan=2|J column (bit 0)
+
!colspan=2|kolumna J (bit 0)
!colspan=2|K column (bit 1)
+
!colspan=2|kolumna K (bit 1)
!colspan=2|L column (bit 2)
+
!colspan=2|kolumna L (bit 2)
 
|-
 
|-
 
!JM=0*
 
!JM=0*
Line 622: Line 716:
 
|-
 
|-
 
|rowspan=5|Control 1
 
|rowspan=5|Control 1
|Row 0 Fire||style="text-align:center"|Joy 1 Fire 1||Mice Left Btn
+
|rząd 0 Fire||style="text-align:center"|Joy 1 Fire 1||Mysz Lewy Prz.
|Mice Left Btn or Joy 1 Fire 2*||Joy 1 Fire 2
+
|Mysz Lewy Prz. lub Joy 1 Fire 2*||Joy 1 Fire 2
|colspan=2|Mice Right Btn or Joy 1 Fire 3*
+
|colspan=2|Mysz Prawy Prz. lub Joy 1 Fire 3*
 
|-
 
|-
|Row 1 Up||style="text-align:center"|Joy 1 Up||style="text-align:center"|Mice D0
+
|rząd 1 Góra||style="text-align:center"|Joy 1 Góra||style="text-align:center"|Mysz D0
|style="text-align:center"|Mice D0||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Mysz D0||style="text-align:center; background-color: #cccccc"|wolne
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 2 Down||style="text-align:center"|Joy 1 Down||style="text-align:center"|Mice D1
+
|rząd 2 Dół||style="text-align:center"|Joy 1 Dół||style="text-align:center"|Mysz D1
|style="text-align:center"|Mice D1||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Mysz D1||style="text-align:center; background-color: #cccccc"|wolne
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 3 Left||style="text-align:center"|Joy 1 Left||style="text-align:center"|Mice D2
+
|rząd 3 Lewo||style="text-align:center"|Joy 1 Lewo||style="text-align:center"|Mysz D2
|style="text-align:center"|Mice D2||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Mysz D2||style="text-align:center; background-color: #cccccc"|wolne
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 4 Right||style="text-align:center"|Joy 1 Right||style="text-align:center"|Mice D3
+
|rząd 4 Prawo||style="text-align:center"|Joy 1 Prawo||style="text-align:center"|Mysz D3
|style="text-align:center"|Mice D3||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center"|Mysz D3||style="text-align:center; background-color: #cccccc"|wolne
|style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
+
|style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
 
|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
+
|rząd 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
 
|-
 
|-
|Row 6 Up||colspan=2 style="text-align:center"|Joy 2 Up||style="text-align:center; background-color: #cccccc"|spare
+
|rząd 6 Góra||colspan=2 style="text-align:center"|Joy 2 Góra||style="text-align:center; background-color: #cccccc"|wolne
|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"|wolne||style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 7 Down||colspan=2 style="text-align:center"|Joy 2 Down||style="text-align:center; background-color: #cccccc"|spare
+
|rząd 7 Dół||colspan=2 style="text-align:center"|Joy 2 Dół||style="text-align:center; background-color: #cccccc"|wolne
|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"|wolne||style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 8 Left||colspan=2 style="text-align:center"|Joy 2 Left||style="text-align:center; background-color: #cccccc"|spare
+
|rząd 8 Lewo||colspan=2 style="text-align:center"|Joy 2 Lewo||style="text-align:center; background-color: #cccccc"|wolne
|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"|wolne||style="text-align:center; background-color: #cccccc"|wolne||style="text-align:center; background-color: #cccccc"|wolne
 
|-
 
|-
|Row 9 Right||colspan=2 style="text-align:center"|Joy 2 Right||style="text-align:center; background-color: #cccccc"|spare
+
|rząd 9 Prawo||colspan=2 style="text-align:center"|Joy 2 Prawo||style="text-align:center; background-color: #cccccc"|wolne
 
|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"|spare||style="text-align:center; background-color: #cccccc"|spare||style="text-align:center; background-color: #cccccc"|spare
 
|}
 
|}
  * Mouse buttons have higher priority
+
  * Przyciski myszy mają wyższy priorytet
  * JM=0 (DS1 ON)  native EnterMice mouse mode
+
  * JM=0 (DS1 ON)  podstawowy tryb myszy EnterMice
   JM=1 (DS1 OFF) joystick emulation & BoxSoft compatible mode
+
   JM=1 (DS1 OFF) emulacja joysticka oraz tryb zgodności z BoxSoft
  
===Sega Twister===
+
===Podłączanie innych urządzeń do EnterMice===
[[File:EM_SegaExt.png|thumb|200px|Diagram]]
+
====SEGA Twister====
[[File:adapter.jpg|thumb|200px|Prototype]]
+
[[File:EM_SegaExt.png|thumb|200px|Schemat]]
[[File:em_adapter.jpg|thumb|200px|EnterMice with adapter]]
+
[[File:adapter.jpg|thumb|200px|Prototyp]]
to connect the Sega six-button pad
+
[[File:em_sega_mod_pl.png|thumb|200px|Modyfikacja EnterMice]]
 +
[[File:em_adapter.jpg|thumb|200px|EnterMice z adapterem]]
 +
do podłączenia sześcioprzyciskowego kontrolera Sega
 
[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 Informajce o sześcioprzyciskowym kontrolerze Sega]
  
[https://applause.elfmimi.jp/md6bpad-e.html Interface Protocol of SEGA MegaDrive's 6-Button-Controller]
+
[https://applause.elfmimi.jp/md6bpad-e.html Opis protokołu interfejsu sześcioprzyciskowego kontrolera SEGA MegaDrive]
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 679: Line 775:
 
!Select = pulse-3
 
!Select = pulse-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"|Góra||style="text-align:center"|Góra||style="text-align:center"|Przycisk 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"|Dół||style="text-align:center"|Dół||style="text-align:center"|Przycisk 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"|GND||style="text-align:center"|Lewo||style="text-align:center"|Przycisk 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"|GND||style="text-align:center"|Prawo||style="text-align:center; background-color: #cccccc"|nie używane
 
|-
 
|-
 
|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"|Przycisk A||style="text-align:center"|Przycisk B||style="text-align:center; background-color: #cccccc"|nie używane
 
|-
 
|-
 
|style="text-align:center"|7||colspan=3 style="text-align:center"|Select
 
|style="text-align:center"|7||colspan=3 style="text-align:center"|Select
Line 695: Line 791:
 
|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"|Button C||style="text-align:center; background-color: #cccccc"|not used
+
|style="text-align:center"|9||style="text-align:center"|Start||style="text-align:center"|Przycisk C||style="text-align:center; background-color: #cccccc"|nie używane
 +
|}
 +
====Neos mouse====
 +
[[File:EM_NeosExt.png|thumb|200px|Neos Twister schemat]]
 +
{|class="wikitable"
 +
|+Mysz Neos pinout
 +
!pin
 +
!Funkcja
 +
|-
 +
|style="text-align:center"|1||style="text-align:center"|Góra
 +
|-
 +
|style="text-align:center"|2||style="text-align:center"|Dół
 +
|-
 +
|style="text-align:center"|3||style="text-align:center"|Lewo
 +
|-
 +
|style="text-align:center"|4||style="text-align:center"|Prawo
 +
|-
 +
|style="text-align:center"|5||style="text-align:center"|Nie podłączone
 +
|-
 +
|style="text-align:center"|6||style="text-align:center"|/Strobe - Lewy przycisk
 +
|-
 +
|style="text-align:center"|7||style="text-align:center"|+5V
 +
|-
 +
|style="text-align:center"|8||style="text-align:center"|GND
 +
|-
 +
|style="text-align:center"|9||style="text-align:center"|Prawy przycisk
 
|}
 
|}
  
==Information for developers==
+
====MSX mouse====
===EnterMice timings===
+
[[File:EM_MsxExt.png|thumb|200px|MSX Twister schemat]]
The firmware of EnterMice is optimized for the cyclic reading with 50 Hz frequency (video IRQ).
+
{|class="wikitable"
 +
|+Mysz MSX pinout
 +
!pin
 +
!Funkcja
 +
|-
 +
|style="text-align:center"|1||style="text-align:center"|Góra
 +
|-
 +
|style="text-align:center"|2||style="text-align:center"|Dół
 +
|-
 +
|style="text-align:center"|3||style="text-align:center"|Lewo
 +
|-
 +
|style="text-align:center"|4||style="text-align:center"|Prawo
 +
|-
 +
|style="text-align:center"|5||style="text-align:center"|+5V
 +
|-
 +
|style="text-align:center"|6||style="text-align:center"|Lewy przycisk
 +
|-
 +
|style="text-align:center"|7||style="text-align:center"|Prawy przycisk
 +
|-
 +
|style="text-align:center"|8||style="text-align:center"|Strobe
 +
|-
 +
|style="text-align:center"|9||style="text-align:center"|GND
 +
|}
 +
 
 +
====Gadżety USB====
 +
Maksymalny prąd dostępny na złączu PS/2 jest ograniczony wydajnością wewnętrznych stabilizatorów Enterprise.
 +
W praktyce nie należy przekraczać obciążenia 300mA.
 +
===Obudowa 3D===
 +
[http://www.redplanet.hu/ep/ep128entermicev1_v018.zip Wersja pierwsza] (DIP switch po stronie elementów)
 +
 
 +
[[File:ep128entermicev1.jpg|250px]]
 +
 
 +
[http://www.redplanet.hu/ep/ep128entermicev2_v018.zip Wersja druga] (DIP switch po stronie złącz krawędziowych)
 +
 
 +
[[File:ep128entermicev2.jpg|250px]]
 +
 
 +
==Informacje dla programistów==
 +
===Stałe czasowe EnterMice===
 +
Firmware interfejsu EnterMice został zoptymalizowany dla cyklicznych odczytów z częstotliwością 50 Hz (przerwanie wideo).
 
{|
 
{|
|Default reading cycle||style="text-align:right"|20 ms
+
|Domyślny cykl odczytu||style="text-align:right"|20 ms
 
|-
 
|-
|Waiting time to perform self-test the PS/2 mouse (timeout)||style="text-align:right"|ca. 2000 ms
+
|Czas oczekiwania na wykonanie self-testu myszy PS/2 (timeout)||style="text-align:right"|ok. 2000 ms
 
|-
 
|-
|Time of collecting the PS/2 mouse data||style="text-align:right"|max. 12 ms
+
|Czas pobierania kompletu danych z myszy 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
+
|Czas od zmiany stanu sygnału RTS do wystawienia danych (półbajtu) gotowych do odczytu||style="text-align:right"|25 μs
 
|-
 
|-
|Standby time for the next reading (counting from data issue)||style="text-align:right"|14 μs
+
|Czas bezczynności przed kolejnym odczytem (liczony od wystawienia półbajtu)||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
+
|Czas od ostatniego odczytu do wyzerowania licznika półbajtów (timeout)*||style="text-align:right"|1500 μs
 
|-
 
|-
|Default mouse polling time in joystick emulation mode||style="text-align:right"|30 ms
+
|Domyślny czas odpytywania myszy w trybie emulacji joysticka||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
+
|Czas odpytywania myszy w trybie emulacji joysticka, gdy mysz nie jest poruszana (minimalizacja opóźnienia)||style="text-align:right"|12,5 ms
 
|}
 
|}
  * After this time starts another mouse data polling.
+
  * Po tym czasie rozpoczyna się kolejny odczyt danych z myszy.
  
===Data buffer===
+
===Bufor danych===
Data buffer in EnterMice has a size of 16 bytes.
+
Bufor danych w EnterMice ma rozmiar 16 bajtów.
  
Currently is used only a half. The remainder may be used in the future.
+
Aktualnie wykorzystana jest tylko połowa. Reszta może zostać wykorzystana w przyszłości.
 
{|class="wikitable"
 
{|class="wikitable"
!Bits
+
!Bity
!colspan=4|High nibble
+
!colspan=4|Górna połowa
!colspan=4|Low nibble
+
!colspan=4|Dolna połowa
!rowspan=2|Content
+
!rowspan=2|Zawartość
 
!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"|Bajt||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"|wartość X
|style="text-align:center"|signed int (positive is moved left)
+
|style="text-align:center"|całkowita ze znakiem (dodatnia oznacza ruch w lewo)
|rowspan=2|BoxSoft protocol||rowspan=4 style="width: 30px; background-color: #80ff80"| ||rowspan=8 style="width: 30px; background-color: #ffdd99"|
+
|rowspan=2|protokół 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"|wartość Y
|style="text-align:center"|signed int (positive is moved up)
+
|style="text-align:center"|całkowita ze znakiem (dodatnia oznacza ruch w górę)
 
|-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"|Identyfikator protokołu i stan przycisków 3,4,5 (1=wciśnięty)
|colspan=2 rowspan=2|Extended MSX protocol
+
|colspan=2 rowspan=2|rozszerzony protokół 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"|''kółko poziome''<sup> 2)</sup>||colspan=4 style="text-align:center"|wartość Z
|style="text-align:center"|signed int (positive is wheel moved up)
+
|style="text-align:center"|całkowita ze znakiem (dodatnia oznacza ruch kółka w górę)
 
|-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"|ID myszy
|style="text-align:center"|Extra bytes available to read (include this) & PS/2 mouse ID
+
|style="text-align:center"|Ilość dodatkowych bajtów możliwych do odczytu (włącznie z tym) i ID myszy PS/2
|colspan=3 rowspan=4|EnterMice extension protocol
+
|colspan=3 rowspan=4|rozszerzony protokół 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 wer. mj.||colspan=4 style="text-align:center"|Hw wer. mn.
|style="text-align:center"|Hardware version (major.minor)
+
|style="text-align:center"|Wersja sprzętu (major.minor)
 
|-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 wer. mj.||colspan=4 style="text-align:center"|Fw wer. mn.
|style="text-align:center"|Firmware version (major.minor)
+
|style="text-align:center"|Wersja firmware (major.minor)
 
|-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 urządzenia
|style="text-align:center"|EnterMice ID is 5Dh
+
|style="text-align:center"|Identyfikator EnterMice to 5Dh
 
|}
 
|}
* not implemented yet, now all 8 bits represents a Z value (Vertical wheel)
+
<sup> 1)</sup> Jeśli urządzenie obsługuje tylko protokół BoxSoft, to piąty półbajt jest zawsze równy 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> Jeszcze nie zaimplementowane, aktualnie wszystkie 8 bitów reprezentuje wartość Z (kółko pionowe)
  
Last state of RTS signal also not matter. EnterMice reacts to the change state, not on the signal level.
+
<sup> 3)</sup> Jeśli urządzenie nie obsługuje protokołu EnterMice, to dziewiąty półbajt jest zawsze równy 0000.  
  
===Mouse reading===
+
 
 +
Nie trzeba za każdym razem odczytywać wszystkich danych z bufora.
 +
 
 +
Odczyt może zostać przerwany w dowolnym momencie. Nastąpi wówczas timeout i interfejs wykona kolejny odczyt danych z myszki, po czym znów będzie gotowy do przesłania danych z bufora.
 +
 
 +
Ostatni stan sygnału RTS również nie ma znaczenia. EnterMice reaguje na zmianę stanu sygnału, a nie na jego poziom.
 +
 
 +
===Odczyt myszy===
 
<code>
 
<code>
 
{|
 
{|
Line 791: Line 956:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 805: Line 970:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 817: Line 982:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 833: Line 998:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 859: Line 1,024:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 875: Line 1,040:
 
| ||out (0B7h),a
 
| ||out (0B7h),a
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 887: Line 1,052:
 
| ||out (0B7h),a||
 
| ||out (0B7h),a||
 
|-
 
|-
| ||ld b,1||; short delay. Stock was 5
+
| ||ld b,2||; short delay. Stock was 5
 
|-
 
|-
 
| ||call WAIT||
 
| ||call WAIT||
Line 1,035: Line 1,200:
 
| ||cp 3||
 
| ||cp 3||
 
|-
 
|-
| ||jr z,L_COLUMN||
+
| ||jr z,J_COLUMN||
 
|-
 
|-
 
|K_COLUMN:|| ||
 
|K_COLUMN:|| ||
Line 1,059: Line 1,224:
 
| ||jr CONTINUE||
 
| ||jr CONTINUE||
 
|-
 
|-
|L_COLUMN:|| ||
+
|J_COLUMN:|| ||
 
|-
 
|-
 
| ||ld a,b||
 
| ||ld a,b||
Line 1,071: Line 1,236:
 
| ||;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,084: Line 1,249:
 
|}
 
|}
 
</code>
 
</code>
 +
===Skrócona procedura odczytu EnterMice (autor Bruce Tanner)===
 +
 +
Ta 79 bajtowa procedura obsługuje tylko protokół MSX, odczytuje wyłącznie ruchy oraz dwa przyciski  myszki.
 +
Służy do łatwej konwersji lub adaptacji starych programów i gier.
 +
Musi być wywoływana w przerwaniu 50Hz oraz zakłada, że zmienne X_REL i Y_REL znajdują się w kolejnych słowach pamięci.
 +
 +
<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>
 +
===Kompaktowa procedura obsługi myszki wraz ze wszystkimi przyciskami i kółkiem, dzięki IstvanV===
 +
Procedura wyzwalana przerwaniem VSYNC (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>
 +
 +
===Odczyt przycisków myszy bez korzystania z procedury===
 +
 +
EnterMice odczytuje stan przycisków w inny sposób niż Boxsoft+Neos. W oryginalnym interfejsie zawsze można odczytać stan dwóch głównych przycisków tak samo jak styki w joysticka, wpisując 0 lub 5 do portu B5h Z80, a następnie odczytując zwróconą wartość z portu B6h. Jest to niezależne od odczytu danych o ruchach myszki.
 +
 +
Ponieważ mysz PS/2 przekazuje dane za pośrednictwem protokołu komunikacyjnego, przyciski myszki nie są wprost podłączone w EnterMice do odpowiednich styków, ale można pobrać ich stan w łatwy sposób poprzez zmianę poziomu linii RTS (stan wysoki co najmniej na 2 μs, później można znów ustawić zero na porcie B5h). Następnie po upływie 1,5 ms EnterMice uruchamia procedurę odczytu danych z myszki PS/2 (która trwa w najgorszym przypadku 12 ms) i w końcu na podstawie odczytanych danych ustawia właściwą wartość w porcie B6h zawierającą informacje o stanie dwóch głównych przycisków.
 +
 +
Przykład:
 +
<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                         
 +
|-
 +
| ||out (0B5h),a||;Keyboard row 0 is requested
 +
|-
 +
| ||in a, (0B6h)||;The two mouse buttons are read on bits 1 and 2
 +
|-
 +
|}
 +
</code>
 +
 +
=Instrukcje w innych językach=
 +
Wersja [[EnterMice|angielska]]
 +
 +
Wersja [[EnterMice_(Spanish)|hiszpańska]]
 +
 +
Wersja [[EnterMice_(Deutsch)|niemiecka]]
 +
 +
Wersja [[EnterMice_(Magyar)|węgierska]]

Latest revision as of 16:17, 27 March 2019

EnterMice

Interfejs joysticków i myszy PS/2 dla komputera Enterprise 64 / 128

Wstęp

Opisany poniżej zintegrowany interfejs został zaprojektowany dla komputerów Enterprise 64/128.

Jest efektem sześciu miesięcy pracy polskiego hobbysty znanego na forach dyskusyjnych pod nickiem Pear. Prace zostały rozpoczęte za namową hiszpańskiego kolegi GFlorez (który wraz z Zozo, jako pierwsi użytkownicy testowali EnterMice) z forum EnterpriseForever.com.

Głównym przeznaczeniem interfejsu jest możliwość podłączenia taniej i powszechnie dostępnej myszki PS/2 do komputera Enterprise. Ponadto umożliwia podłączenie dwóch joysticków standardu Atari bezpośrednio, bez konieczności stosowania dodatkowych adapterów.

EnterMice bazuje na rozwiązaniach zastosowanych w interfejsie BoxSoft, który obsługuje protokół myszy Neos (MSX).

W jednym z dostępnych trybów pracy EnterMice jest całkowicie kompatybilny ze starszym interfejsem myszki BoxSoft. W innym trybie ruch myszki zamieniany jest na impulsy symulujące ruch joysticka.


Krótka historia o Enterprise i myszy

Rozszerzenie możliwości Enterprise 128 o sterowanie myszką nie jest nowym, ekscentrycznym pomysłem grupy komputerowych retromaniaków. Było to planowane już przez projektantów tego komputera. Problem polegał na tym, że zadanie zostało powierzone skromnej, angielskiej firmie Aztec Software Ltd, która zaprezentowała rozczarowujący efekt swojej pracy. Z dwóch głównych powodów. Po pierwsze, myszka była po prostu brzydka [1], w niczym nie przypominała zaokrąglonych kształtów Enterprise. Po drugie, urządzenie tak naprawdę nie działało jak myszka, tylko naśladowało ruchy joysticka. Również w tym czasie firma Enterprise Computing Ltd. zniknęła z rynku.

Jednakże baza użytkowników w Wielkiej Brytanii pozostała bardzo aktywna w kolejnych latach. Pasjonaci Enterprise zakładali małe firmy. Oferowane były nowe produkty: rozszerzenia pamięci, dedykowane okablowanie, gry, programy użytkowe, emulatory ZX Spectrum, kontrolery dysków IDE, karty EPROM, rozszerzenia płyty głównej, modemy i wiele innych.

Najbardziej płodna była firma Boxsoft, której założycielem był Tim Box. Boxsoft oferowała większość produktów wymienionych powyżej. W pakiecie z programem graficznym Paintbox [2], wprowadzono do sprzedaży adapter [3] wraz z myszką Neos oraz dołączonym do niej sterownikiem. Mysz Neos, wewnętrznie [4] niemal nie różni się od myszy dla komputerów MSX [5] i była już z powodzeniem dostosowywana do innych komputerów 8-bitowych takich jak na przykład Commodore 64.

W tamtym czasie tylko kilka komputerów 8-bitowych posiadało myszkę oraz graficzny interfejs użytkownika (GUI). Było niezwykle trudno sprzedać nowy, nieznany wynalazek do tego nie w pełni zintegrowany z komputerem. Patrząc z dzisiejszej perspektywy, zalety nawigacji systemem operacyjnym i aplikacjami przy użyciu myszki jest czymś oczywistym. Wygoda kończy się natychmiast, gdy mysz przestaje działać ...


Mimo wszystko udało się sprzedać około stu pakietów Paintbox.

Program Paintbox przybył na Węgry oddzielnie. Węgrzy kupowali komputery Enterprise wiedząc o nich tylko tyle, że pochodzą z Wielkiej Brytanii i nic więcej. Gdy wszyskie Enterprise 128 zostały sprzedane, użytkowników pozostawiono samym sobie podobnie jak w macierzystym kraju. Kolejny raz wypłynęły na rynek małe firmy oferujące nowe produkty. Wówczas firma "A studio" rozpoczęła produkcję i sprzedaż produktów Boxsoft, maskując je jako własne produkty. Jedna z wersji Paintbox została pozbawiona opcji sterowania myszką. Mimo to wciąż potrzebowała do pracy sterownika tejże myszki. Po wschodniej stronie Żelaznej Kurtyny nikt nigdy nie słyszał o myszy Neos.

Później, na Węgrzech, powstała karta interfejsu szeregowego [6] dla Enterprise, dzięki genialnemu zespołowi węgierskich projektantów: Gyula Mészáros sprzęt i László Haluska (HSOFT) oprogramowanie. HSOFT przystosował okrojony przez "A studio" sterownik myszki do współpracy z szeregową myszką Mouse Systems, a następnie stworzył sterownik wbudowany w system operacyjny EPDOS 2.x.

To już odległa historia, ale w obecnych czasach globalizacji i ogólnodostępnego Internetu, pojawiło się kilka starych artefaktów Boxsoft+Neos i wszystkie kawałki układanki zaczęły do siebie pasować. W końcu, spełniły się stare obietnice (zobacz reklamy Enterprise Computers Ltd.) i Enterprise doczekał się własnego interfejsu myszki z prawdziwego zdarzenia.




Nowy interfejs EnterMice prezentowany tutaj bazuje na pracy grupy Boxsoft, ale został zaadaptowany do współczesnych potrzeb i stwarza nowe możliwości. (To cud co osiągnął Tim Box wyłącznie przy pomocy kilku bramek i diod [7]). Co do oprogramowania zaś, to sterownik był bardzo dobrze napisany przez D. Rabson, Andrew Fitter i Andrew Richards. Z niewielkimi modyfikacjami, ten sam sterownik jest używany przez interfejs EnterMice.

Podstawowym problemem interfejsów dla Enterprise są złącza oraz sygnały dalece odbiegające od standardów myszy i josticka. Małe złącza krawędziowe, które przypadkowo można podłączyć do góry nogami, sygnały przycisków podciągnięte do +5V podczas, gdy standardem jest łączenie ich do 0V, brak jakichkolwiek zabezpieczeń przed zwarciem kilku przycisków jednocześnie, brak możliwości przesłania informacji zwrotnie do sterownika i prawdopodobnie jeszcze wiele innych przypadłości.

Teraz to co Boxsoft wykonał przy użyciu dostępnych, tanich komponentów, zostało przeprojektowane i ulepszone z użyciem dwóch nowocześniejszych programowalnych układów. Jeden z tych układów (Xilinx XC9572) jest odpowiedzialny za połączenia i konwersję sygnałów do standardowego joysticka Atari. Oryginalny interfejs Boxsoft korzystał tylko z portu Control 1, który mógł być używany do podłączenia myszy Neos lub joysticka (ale nie obu jednocześnie). W niniejszym projekcie są podłączone i udostępnione oba porty joysticków nie zakłócające się ze złączem myszki.

Myszki Neos/MSX nie są dziś często spotykane w związku z czym zaimplementowano konwersję protokołu myszy PS/2 do MSX. Tą część obsługuje drugi z układów, prosty i niedrogi kontroler Atmel AT89C4051, którego oprogramowanie wewnętrzne zostało zoptymalizowane do pracy nawet z podrasowanym komputerem Enterprise. EnterMice działa równie dobrze z Enterprise ze standardowym zegarem 4 MHz jak i z jego superdoładowaną 10 MHz wersją.

Również protokół odczytu myszy został wzbogacony o nowe rozszerzenie protokołu MSX autorstwa Prodatron i NYYRIKKI, które pozwala na odczytanie stanu nawet pięciu przycisków oraz kółka, jeśli myszka je posiada.

Lista programów współpracujących z myszką (aktualizowana)

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

File.jpg

Paintbox ze sterownikiem myszy.[10]

Paintbox.png

Enterprise Graphical Interface (EGI) ze sterownikiem myszy.[11]

EGI.JPG

SymbOS wewnętrznie, w trybie podstawowym EnterMice (modyfikacja przez hack)[12].By Prodatron[13].

SymbOS.png

Programy w Basicu mogą korzystać ze sterownika myszy.

Stare programy używające joysticka w porcie 1, z EnterMice w trybie emulacji joysticka.

EDC Windows, wewnętrznie w trybie EnterMice oraz jako driver w trybie Hsoft. Użyj zmodyfikowanych plików: [14]

Edcw.png

SPEmu128 autorstwa geco, doskonały emulator ZX Spectrum dla Enterprise, umożliwia emulację myszy Kempston [15] wykorzystując informacje o ruchach myszki z interfejsu EnterMice. Lista kompatybilnych gier stale rośnie.[16]

Moorhun.png

Lista gier

Pasziansz(Pasjans) [17]. Wersja ROM [18]

Pasziansz1.PNG

SWAP [19]

Swap.gif

Wolf2004 First person shoot'em up. Konwersja z ZX Spectrum przez Geco[20]

Wolf2004.png

Bricky Prise. Gra stworzona przez Geco, Endi i Szipucsu. Adaptacja dla EnterMice przez Isvan-V. [21] i [22]

Bricky.png

Pięć w rzędzie. Gra strategiczna napisana w BASIC. Adaptacja dla EnterMice przez Lacika. [23]

Fiverow.jpg

Chess Master 2000 skonwertowana z Amstrada CPC przez Geco[24]

Cm2000.JPG

Emulatory XEP128 i EP128emu

Nawet jeśli nie masz interfejsu EnterMice, możesz przetestować sterowanie myszką na emulatorze Enterprise. Doskonały emulator XEP128[25] autorstwa LGB umożliwia naśladowanie interfejsu z użyciem myszki komputera PC. Możesz również wypróbować emulację ZX Spectrum przez SPEmu128 na emulowanym Enterprise. Mysz Kempston będzie wówczas sterowana myszką komputera PC ...

Tutaj [26] wyjaśnienie w jaki sposób skonfigurować emulator XEP128, aby prawidłowo pracował na PC z systemem Windows.

W tym miejscu[27] opis konfiguracji dla systemu OSX.


Dzięki pracy LGB nad jego emulatorem XEP128, również IstvanV zaktualizował swój EP128emu dodając emulację EnterMice. Dostępny jest prosty instalator dla systemu Windows.

Aktualną wersję można pobrać tutaj [28].

Opis ogólny

EnterMice przód
EnterMice tył

Ważne

Nie podłączaj interfejsu do komputera przy załączonym zasilaniu !
Natychmiast wyłącz zasilanie, jeśli po podłączeniu interfejsu
komputer nie uruchomi się prawidłowo lub zauważysz jego nietypowe zachowanie !

Sprawdź czy interfejs jest podłączony prawidłowo i spróbuj ponownie.

Myszkę i joysticki można podłączać i odłączać podczas pracy komputera, jednak nie jest to zalecane. Bezpieczniej jest wykonać wszystkie podłączenia przy wyłączonym zasilaniu.

Uwaga: Zanim podłączysz jakiekolwiek urządzenie, dla którego interfejs EnterMice nie został zaprojektowany, przeczytaj proszę rozdział "Podłączanie innych urządzeń do EnterMice".

Podłączenie do komputera

Płytka interfejsu jest podłączona jednocześnie do trzech złączy krawędziowych z tyłu komputera: Control 1, Control 2 oraz Serial. Złącza w interfejsie są zamontowane pod kątem nieco większym niż 90°. Jest to celowe, aby zapewnić lepsze dopasowanie interfejsu do złącz Enterprise.

Możliwe jest podłączenie tylko w jeden sposób, jednak może się zdarzyć, że styki nie trafią centralnie w kontakty złącza krawędziowego. Jeśli tak się stanie połączenie może być niestabilne i komputer i/lub interfejs mogą nie pracować prawidłowo.

Właściwie podłączony interfejs działa prawidłowo od razu po załączeniu zasilania komputera.

Po uruchomieniu wykonywany jest self-test interfejsu, podczas którego obie diody LED błyskają 3 razy (bez względu na ustawienie przełącznika DS3).

Po podłączeniu EnterMice do komputera, zalecane jest podłączenie myszki przed załączeniem zasilania. Mimo to interfejs posiada funkcję hot-plug umożliwiającą rozpoznanie podłączenia myszki w trakcie pracy, wówczas jest ona identyfikowana i przygotowywana do pracy (trwa to około 2-3 sekund).

Pomyślne zakończenie inicjalizacji myszki sygnalizowane świeceniem zielonej diody LED (jeśli przełącznik DS3 jest ustawiony w pozycji ON).

Funkcje

Interfejs posiada kilka trybów pracy. Do konfiguracji służy pięcio-sekcyjny przełącznik (DS).

Ustawienia konfiguracji mogą być zmieniane podczas pracy interfejsu. Nie jest wymagane wyłączanie ani restartowanie komputera.

Poniżej opis wszystkich możliwych ustawień.

DS1 DS2 Tryb pracy
ON ON Podstawowy tryb myszy EnterMice
OFF ON Tryb myszy zgodny z BoxSoft. Przyciski myszy są odwrócone. Głównym przyciskiem jest prawy przycisk myszy.
OFF OFF Tryb emulacji joysticka (ruchy myszy są przekierowane do portu Control 1, złącze Joystick 1 zostaje odłączone)
ON OFF nie używane (faktycznie EnterMice emuluje joystick w kolumnie K klawiatury)

Złącze Joystick 2 działa zawsze w ten sam sposób, niezależnie od wybranego trybu pracy interfejsu.


DS3 Kontrolki LED
OFF Wyłączone
ON Załączone


Konfiguracja trybu emulacji joysticka

DS4 Czułość
OFF Normalna
ON Podwyższona
DS5 Korekcja ruchów ukośnych
OFF Wyłączona
ON Załączona

Korekcja ruchów ukośnych poprawia precyzję emulacji joysticka dla ruchów po skosie kosztem niewielkiego zmniejszenia prędkości.

Korzystanie ze sterownika

W tym miejscu znajdziesz sterownik myszy.

Poniższy tekst pochodzi z oryginalnej instrukcji obsługi Paintbox, poprawionej i uzupełnionej o nowe możliwości EnterMice.


Jak używać myszy we własnych programach ?

Korzystanie z myszy nie jest zarezerwowane wyłącznie dla programów w kodzie maszynowym. Łatwo można dodać obsługę myszy niemal do każdego programu w BASIC'u. W tym celu konieczne jest użycie rozszerzenia EXOS nazywanego sterownikiem myszy ("MOUSE.XR").

Sterownik ten umieści wskaźnik myszy na dowolnym ekranie graficznym lub tekstowym i będzie odzwierciedlał ruchy myszy poprzez przemieszczanie kursora po ekranie. Kursor w trybie tekstowym działa wewnętrznie z dokładnością do piksela, ale rysowany jest w obrębie pojedynczego znaku, więc może się poruszać skokowo na krótkich dystansach.

Sterownik myszy może wykonywać różne polecenia i funkcje, na przykład włączyć lub wyłączyć kursor. Istnieją dwie metody komunikacji ze sterownikiem, pierwsza przez bezpośredni odczyt i zapis, druga z pośrednictwem zmiennych systemowych.

Ładowanie sterownika

Sterownik myszy może być załadowany dowolną metodą, tj; "START" z poziomu BASIC (jeśli z taśmy) lub LOAD "MOUSE.XR". Może też być załadowany z "WP", z EXDOS lub jakiegokolwiek innego języka (sprawdź szczegółowy opis dla odpowiedniego języka).

Po załadowaniu sterownik pozostanie w pamięci (program rezydentny) do następnego restartu lub wyłączenia komputera.

We wcześniejszych wersjach, do poprawnej pracy, konieczna była inicjalizacja za pomocą polecenia EXOS ":PB". EGI i Paintbox wykonują tę operację wewnętrznie.

Jeśli korzystasz ze starszej wersji, nigdy nie wykonuj inicjalizacji więcej niż raz. Przy drugiej próbie komputer się zawiesi. Zignoruj ​​komunikat o błędzie, który się pojawi. Kod błędu (otrzymywany w BASIC z EXTYPE) to 9000+strona pamięci, do której został załadowany sterownik. Zostało to zrobione ceolowo przez autorów sterownika.

Bieżąca wersja wykonuje ​​automatyczną inicjalizację, ale również poprawnie współpracuje ze starszymi programami (EGI i Paintbox), które nadal mogą bezproblemowo używać usuniętego polecenia :PB.

Wielokrotne ładowanie sterownika nie jest szkodliwe, ale ponieważ tylko ostatni załadowany będzie pracował, marnuje się pamięć.

Poniżej prosta procedura w BASIC-u pozwalająca wykryć czy sterownik został już załadowany:

100 WHEN EXCEPTION USE DRIVER_LOADING
110      SET 189,4 ! próba ustawienia trybu pracy EnterMice jest możliwa tylko gdy sterownik jest załadowany
120 END WHEN


1000 HANDLER  DRIVER_LOADING
1010      EXT "LOAD MOUSE.XR" ! plik sterownika powinien się znajdować w bieżącym katalogu, jeśli się tam nie znajduje, otrzymamy błąd
1020      PRINT "Loading the Mouse Driver"
1030      SET 189,4                  ! tutaj otrzymujemy potwierdzenie, że sterownik został prawidłowo zainstalowany
1040 END HANDLER

Sprawdzenie można wykonać również w bardziej skomplikowany i skuteczny sposób ustawiając zmienną sygnalizującą status "sterownik niezaładowany", a następnie załadować sterownik w głównym programie. Wówczas, jeśli plik sterownika nie zostanie odnaleziony (prawdopodobnie znajduje się w innym katalogu), to błąd może być rozpoznany w tym samym lub kolejnym podprogramie obsługi.

Dobrą praktyką jest zapobieganie wielokrotnemu instalowaniu sterownika myszy.

Wykonanie polecenia ":HELP MOUSE" wyświetla informacje o wersji sterownika, a jeśli wykryty zostanie interfejs EnterMice, to wyświetlone zostaną dodatkowe informacje: identyfikator podłączonej myszki, wersja sprzętu i frimware.

Komunikacja ze sterownikiem myszki

Jak wspomniano powyżej, istnieją dwa sposoby komunikacji ze sterownikiem myszki. Aby zaprezentować obie metody i ich działanie, powinniśmy najpierw poznać wszystkie polecenia, funkcje i zmienne, a następnie pokazać sposoby ich użycia w programie.

Polecenia i funkcje drukowania

Pierwszą i najważniejszą czynnością jes otwarcie kanału myszki, np. OPEN £n:"MOUSE:" (n oznacza numer kanału).

Trzeba pamiętać, że kanał myszki jest zawsze powiązany z kanałem wideo, na którym wyświetlany jest wskaźnik. Otwarcie kanału myszki bez kanału wideo jest niemożliwe. Jeśli kanał wideo zostanie zamknięty lub zmieniony, podczas gdy kanał myszki jest otwarty, procedura obsługi myszy wykryje to i się dezaktywuje. Kanał myszy pozostanie otwarty, ale nie będzie działał. Aby tego uniknąć w programie, w pierwszej kolejności należy zamykać kanał myszy, a dopiero potem kanał wideo.

Również po zatrzymaniu przez STOP programu w Basic'u zawsze wykonaj polecenie CLOSE £? przed wykonaniem polecenia TEXT, ponieważ edytor Basic automatycznie zamyka kanał wideo trybu graficznego.

Polecenia wydawane przez drukowanie do kanału myszki:

O Pokaż wskaźnik myszki na ekranie
o Ukryj wskaźnik myszki
P Pobierz współrzędne X i Y

Wyniki lub stany uzyskiwane przez odczyt znaków z kanału myszki:

Odczyt tylko po wcześniejszym przesłaniu "P":

X Młodszy bajt
X Starszy bajt
Y Młodszy bajt
Y Starszy bajt

Zawsze możliwe do odczytu:

Fire = "1" jeśli główny (prawy) przycisk wciśnięty lub "0" w przeciwnym wypadku.

Zmienne systemowe

Adres Zawartość Wartość domyślna
180 Kanał wideo, wymagany do pokazania wskaźnika myszy 101
181 Pozycja współrzędnych X,Y w linii statusu 30
182 Współrzędna wyświetlania stanu: 1 załączony, 0 wyłączony 0
183 Kolor wskaźnika myszy (patrz informacje techniczne poniżej) 255
184 Młodszy bajt współrzędnej X
185 Starszy bajt współrzędnej X. W dalszej części znajdziesz przykładowy program przeliczania współrzędnych.
186 Młodszy bajt współrzędnej Y
187 Starszy bajt współrzędnej Y
188 Stan przycisku 0 zwolniony, 1 wciśnięty
189 Urządzenie wejściowe:
  0 - Wewnętrzny joystick             2 przyciski, Spacja i Enter
  1 - Joystick w porcie Control 1     3 przyciski
  2 - Joystick w porcie Control 2     3 przyciski
  3 - Mysz BoxSoft                    2 do 5 przycisków
  4 - EnterMice (domyślne ustawienie) 2 do 5 przycisków
  5 - Mysz szeregowa Mouse Sytems     3 przyciski
  6 - Mysz szeregowa Microsoft        2 przyciski
 >6 - nie zaimplementowane
190 Stan drugiego i pozostałych przycisków, jeśli są obecne oraz licznik kółka, jeśli jest.
  Bity 0 do 3 wartość z przedziału -8 do 7 (4 bity ze znakiem)
  Bit 4 przycisk pod kółkiem lub środkowy
  Bit 5 przycisk 4.
  Bit 6 przycisk 5.
  Bit 7 drugi przycisk (lewy)
      Stan przycisków: 0 zwolniony, 1 wciśnięty, jeśli obecny jest trzeci przycisk, jego stan jest przypisany do bitu 4

Przykłady

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.

Teraz należy dodać funkcję MOUSE_POS. Zwraca ona pozycję wskaźnika myszy. Wybierz jedną z dwóch możliwości:

Odczytaj współrzędne wskaźnika z kanału myszy:

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

lub odczytaj współrzędne wskaźnika ze zmiennych systemowych:

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

Możesz również skorzystać z polecenia sterownika, aby umieścić wskaźnik myszy w dowolnym miejscu na ekranie:

Współrzędne wskaźnika ustaw poprzez zmienne systemowe.

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

To bardzo prosty program graficzny; pozwala rysować linie za pomocą ruchów myszki, gdy przycisk jest wciśnięty, Funkcja MOUSE_POS jest wywoływana w linii 150. W zależności od tego jak chcesz odczytać położenie wskaźnika myszy, użyj jednej z dwóch przedstawionych powyżej wersji funkcji.

Kolejna pokazana procedura pozwala na ustawienie położenia wskaźnika myszy. Po prostu wywołaj procedurę podając współrzędne X oraz Y.

Eksperymentuj z różnymi funkcjami i procedurami i próbuj dodawać je do własnych programów. Nawet nie zauważysz jak szybko odkryjesz, że dodanie obsługi myszki do istniejącego programu, czy też napisanie nowego programu z jej wykorzystaniem jest bardzo proste.

Jak użyć kółka i dodatkowych przycisków we własnych programach ?

Operowanie na bitach w BASIC-u Enterprise jest powolne i skomplikowane. Zmienna systemowa 190 zawiera wiele informacji, ale nie są łatwe do wydobycia:

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

Wewnątrz programu w BASIC-u możesz użyć procedury w kodzie maszynowym, aby rozbić te informacje na pięć bajtów. Dodatkowo procedura zeruje licznik Z po każdym jej wywołaniu:

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

Procedura w assemblerze:

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   

Poniżej wyjaśnienie działania procedury obsługi kółka:

Młodszy półbajt zmiennej systemowej 190 zawiera licznik impulsów odwbranych z kółka od chwili jego ostatniego zerowania. Impulsy mogą być dodatnie lub ujemne, sterownik dodaje lub odejmuje je od stanu licznika, a następnie przechowuje wartość w przedziale od -8 do 7. Główny program powinien zapewnić cykliczne wywoływanie procedury odczytu licznika (z XPLOD). Po wywołaniu licznik jest zerowany (również w procedurze XPLOD), a odczytane wartości znajdują się pod adresem (XPLOD+6) i mogą być wykorzystane na przykład do przewijania zawartości ekranu.

Zauważ, że drugi przycisk myszy jest podłączony oddzielnym przewodem i jego stan może być odczytany bezpośrednio z matrycy klawiatury (z użyciem procedury opisanej w sekcji "Odczyt stanu joysticków") lub łatwiej przez porównanie zmiennej 190 z wartością 127 (stan drugiego przycisku znajduje się w bicie 7):

ASK 190 SECBUTT
IF SECBUTT>127 THEN GOTO MENU !secondary mouse button pressed!!!

Informacje techniczne o sterowniku

Wywołanie polecenia HELP w EXOS pozwala wyświetlić na ekranie listę wszystkich rozszerzeń i wersji sterowników.

Sterownik myszy działa w trybach graficznych i tekstowych. Planowana w trybie edytora, co pozwoli na wywoływanie akcji po przyciśnięciu przycisku, z uwzględnieniem położenia wskaźnika myszy na ekranie. Wówczas użycie myszki stanie się łatwiejsze na przykład w edytorze BASIC, WP czy EXDOS.

Wartości zmiennej EXOS 183 do zmiany koloru wskaźnika myszy

Ustawienie Wynik
Kolor Numer
Tryb 2-kolorowy 0 0
255 1
Tryb 4-kolorowy 0 0
240 1
15 2
255 3
Tryb 16-kolorowy 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
Tryb 256 kolorów 0-255 0-255

Tryb emulacji joysticka za pomocą myszy

Mysz podłączona do portu PS/2 EnterMice nie jest ograniczona wyłącznie do pracy jako typowa mysz, lecz może również symulować joystick. Ten tryb pracy aktywuje się ustawiając oba przełączniki DS1 oraz DS2 w pozycję OFF. Od tej chwili interfejs konwertuje ruchy myszki z portu PS/2 na przechylenia joysticka w porcie Joy 1. Nie trzeba odłączać wtyczki prawdziwego joysticka z tego portu, zostanie on wyłączony. Mysz będzie przekazywać ruchy tak jak joystick, co może być przydatne w przypadku starszych programów i gier.

Jeśli przełącznik DS3 jest w pozycji ON, to czerwona dioda LED będzie sygnalizować aktywny tryb joysticka. Dioda przygasa na czas, gdy którykolwiek ze styków kierunkowych w porcie joysticka zostanie zwarty.

UWAGA: Przycisk Fire jest lewym przyciskiem myszki. Aby skorzystać z prawego przycisku użyj procedur pokazanych w sekcji dotyczącej interfejsu myszki.

Porty joysticków

EnterMice jest nie tylko interfejsem myszki, ale również umożliwia podłączenie dwóch joysticków standardu ATARI-Kempston-Amiga bez konieczności stosowania dodatkowych adapterów. Obsługiwana jest opcja autofire, jeśli joystick jest w nią wyposażony. Mysz i oba joysticki mogą być podłączone jednocześnie w tym samym czasie. Nie zakłócają się nawzajem.

Odczyt stanu joysticków

Oryginalnie porty Control w Enterprise mają po jednym przycisku Fire, ale w interfejsie EnterMice obsługiwane są po dwa dodatkowe przyciski na każdy port. Oczywiście nie będą one działać w starych grach, ale można je wykorzystać w nowych produkcjach lub nowych konwersjach gier.

Wszystkie sposoby odczytu obu portów działają normalnie. Potrzebny jest tylko dodatkowy kod do odczytu dodatkowych przycisków Fire 2 i 3. Przykładowy kod poniżej.


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


Krótka procedura w assemblerze:


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

Możesz odczytać stan trzech przycisków Fire z obu portów joysticków EnterMice modyfikując linię BASIC-a "140 LET FIRE2=USR(FIRE,4)". Zastąp "4" przez "1" lub "2" (H=0). Dla drugiego portu użyj wartości "1281", "1282" lub "1284" (H=5).

Tą metodą można również odczytać stan dwóch przycisków myszy, które są współdzielone z przyciskami Fire pierwszego joysticka.

Znane problemy

Błędy klawiatury

Rysunek 1
Rysunek 2
Rysunek 3

Podczas tworzenia interfejsu EnterMice, przypadkowo odkryty został poważny błąd w konstrukcji komputera Enterprise.

Nie ujawnia się on dopóki nic nie jest podłączone do portów Control 1 i Control 2. Jednakże EnterMice z nich korzysta ...

Problem polega na zakłócaniu linii KB0..KB9 portu klawiatury, które przenoszą się również na porty Control.

Jeśli tylko jeden klawisz jest wciśnięty, wtedy nic się nie dzieje (rys. 1).

Jednak, jeśli jednocześnie wciśnięte zostaną dwa klawisze w tej samej kolumnie, to sygnał z wybranej linii klawiatury przedostanie się bez przeszkód na sąsiednią linię (rys. 2).

Enterprise nie posiada diod blokujących, które separowały by od siebie linie klawiatury !

Od strony elektrycznej nie ma żadnego zagrożenia (dekoder LS145 wewnątrz komputera posiada wyjścia z otwartym kolektorem), ale odczyty z portów Control 1 i Control 2 są błędne.

W celu wyeliminowania przyczyny należy dodać diody do każdej z linii klawiatury w Enterprise. Zapobiegnie to powstawaniu "kolizji" podczas wciskania jednocześnie więcej niż jednego klawisza (rys. 3).

Pear przygotował płytkę PCB rozwiązującą problem. Bez tej poprawki, aby zapobiec błędom, należy unikać wciskania wielu klawiszy jednocześnie podczas korzystania z joysticków i myszki.

Keyboard fixer (wizualizacja) Keyboard fixer Keyboard fixer wewnątrz Enterprise Klawiatura podłączona poprzez fixer

Microsoft Optical Mouse

Mysz PS/2 Microsoft Optical Mouse jest szczególnym przypadkiem. Po pierwsze powinna być podłączana wyłącznie przy użyciu oryginalnego adaptera Microsoft USB - PS/2. Po drugie działa poprawnie z interfejsem EnterMice, jeśli zostanie podłączona przed załączeniem zasilania. W tym jednym przypadku nie można korzystać z opcji hot-plug, ponieważ mysz nie zostanie rozpoznana.

EnterMice potrafi wymusić rozpoznanie myszy Microsoft przy załączonym zasilaniu, ale wymaga to chwilowego zwarcia styków RESET interfejsu lub naciśnięcia przycisku RESET w przypadku nowszej wersji płytki (restartowany jest wyłącznie interfejs, nie komputer).

Specyfikacja techniczna

Port joysticka

styk sygnał
1 Góra
2 Dół
3 Lewo
4 Prawo
5 Fire 3
6 Fire 1
7 +5 V
8 GND
9 Fire 2

Matryca połączeń

kolumna J (bit 0) kolumna K (bit 1) kolumna L (bit 2)
JM=0* JM=1* JM=0 JM=1 JM=0 JM=1
Control 1 rząd 0 Fire Joy 1 Fire 1 Mysz Lewy Prz. Mysz Lewy Prz. lub Joy 1 Fire 2* Joy 1 Fire 2 Mysz Prawy Prz. lub Joy 1 Fire 3*
rząd 1 Góra Joy 1 Góra Mysz D0 Mysz D0 wolne wolne wolne
rząd 2 Dół Joy 1 Dół Mysz D1 Mysz D1 wolne wolne wolne
rząd 3 Lewo Joy 1 Lewo Mysz D2 Mysz D2 wolne wolne wolne
rząd 4 Prawo Joy 1 Prawo Mysz D3 Mysz D3 wolne wolne wolne
Control 2 rząd 5 Fire Joy 2 Fire 1 Joy 2 Fire 2 Joy 2 Fire 3
rząd 6 Góra Joy 2 Góra wolne wolne wolne wolne
rząd 7 Dół Joy 2 Dół wolne wolne wolne wolne
rząd 8 Lewo Joy 2 Lewo wolne wolne wolne wolne
rząd 9 Prawo Joy 2 Prawo wolne spare spare spare
* Przyciski myszy mają wyższy priorytet
* JM=0 (DS1 ON)  podstawowy tryb myszy EnterMice
  JM=1 (DS1 OFF) emulacja joysticka oraz tryb zgodności z BoxSoft

Podłączanie innych urządzeń do EnterMice

SEGA Twister

Schemat
Prototyp
Modyfikacja EnterMice
EnterMice z adapterem

do podłączenia sześcioprzyciskowego kontrolera Sega [29]

Informajce o sześcioprzyciskowym kontrolerze Sega

Opis protokołu interfejsu sześcioprzyciskowego kontrolera SEGA MegaDrive

Sega pad pinout
pin Select = Low Select = High Select = pulse-3
1 Góra Góra Przycisk Z
2 Dół Dół Przycisk Y
3 GND Lewo Przycisk X
4 GND Prawo nie używane
5 +5V
6 Przycisk A Przycisk B nie używane
7 Select
8 GND
9 Start Przycisk C nie używane

Neos mouse

Neos Twister schemat
Mysz Neos pinout
pin Funkcja
1 Góra
2 Dół
3 Lewo
4 Prawo
5 Nie podłączone
6 /Strobe - Lewy przycisk
7 +5V
8 GND
9 Prawy przycisk

MSX mouse

MSX Twister schemat
Mysz MSX pinout
pin Funkcja
1 Góra
2 Dół
3 Lewo
4 Prawo
5 +5V
6 Lewy przycisk
7 Prawy przycisk
8 Strobe
9 GND

Gadżety USB

Maksymalny prąd dostępny na złączu PS/2 jest ograniczony wydajnością wewnętrznych stabilizatorów Enterprise. W praktyce nie należy przekraczać obciążenia 300mA.

Obudowa 3D

Wersja pierwsza (DIP switch po stronie elementów)

Ep128entermicev1.jpg

Wersja druga (DIP switch po stronie złącz krawędziowych)

Ep128entermicev2.jpg

Informacje dla programistów

Stałe czasowe EnterMice

Firmware interfejsu EnterMice został zoptymalizowany dla cyklicznych odczytów z częstotliwością 50 Hz (przerwanie wideo).

Domyślny cykl odczytu 20 ms
Czas oczekiwania na wykonanie self-testu myszy PS/2 (timeout) ok. 2000 ms
Czas pobierania kompletu danych z myszy PS/2 max. 12 ms
Czas od zmiany stanu sygnału RTS do wystawienia danych (półbajtu) gotowych do odczytu 25 μs
Czas bezczynności przed kolejnym odczytem (liczony od wystawienia półbajtu) 14 μs
Czas od ostatniego odczytu do wyzerowania licznika półbajtów (timeout)* 1500 μs
Domyślny czas odpytywania myszy w trybie emulacji joysticka 30 ms
Czas odpytywania myszy w trybie emulacji joysticka, gdy mysz nie jest poruszana (minimalizacja opóźnienia) 12,5 ms
* Po tym czasie rozpoczyna się kolejny odczyt danych z myszy.

Bufor danych

Bufor danych w EnterMice ma rozmiar 16 bajtów.

Aktualnie wykorzystana jest tylko połowa. Reszta może zostać wykorzystana w przyszłości.

Bity Górna połowa Dolna połowa Zawartość
Bajt 7 6 5 4 3 2 1 0
0 wartość X całkowita ze znakiem (dodatnia oznacza ruch w lewo) protokół BoxSoft
1 wartość Y całkowita ze znakiem (dodatnia oznacza ruch w górę)
2 0 0 0 1 1) 0 Btn5 Btn4 Btn3 Identyfikator protokołu i stan przycisków 3,4,5 (1=wciśnięty) rozszerzony protokół MSX
3 kółko poziome 2) wartość Z całkowita ze znakiem (dodatnia oznacza ruch kółka w górę)
4 ExCnt 3) ID myszy Ilość dodatkowych bajtów możliwych do odczytu (włącznie z tym) i ID myszy PS/2 rozszerzony protokół EnterMice
5 Hw wer. mj. Hw wer. mn. Wersja sprzętu (major.minor)
6 Fw wer. mj. Fw wer. mn. Wersja firmware (major.minor)
7 ID urządzenia Identyfikator EnterMice to 5Dh

1) Jeśli urządzenie obsługuje tylko protokół BoxSoft, to piąty półbajt jest zawsze równy 0000.

2) Jeszcze nie zaimplementowane, aktualnie wszystkie 8 bitów reprezentuje wartość Z (kółko pionowe)

3) Jeśli urządzenie nie obsługuje protokołu EnterMice, to dziewiąty półbajt jest zawsze równy 0000.


Nie trzeba za każdym razem odczytywać wszystkich danych z bufora.

Odczyt może zostać przerwany w dowolnym momencie. Nastąpi wówczas timeout i interfejs wykona kolejny odczyt danych z myszki, po czym znów będzie gotowy do przesłania danych z bufora.

Ostatni stan sygnału RTS również nie ma znaczenia. EnterMice reaguje na zmianę stanu sygnału, a nie na jego poziom.

Odczyt myszy

; 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

Skrócona procedura odczytu EnterMice (autor Bruce Tanner)

Ta 79 bajtowa procedura obsługuje tylko protokół MSX, odczytuje wyłącznie ruchy oraz dwa przyciski myszki. Służy do łatwej konwersji lub adaptacji starych programów i gier. Musi być wywoływana w przerwaniu 50Hz oraz zakłada, że zmienne X_REL i Y_REL znajdują się w kolejnych słowach pamięci.

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

Kompaktowa procedura obsługi myszki wraz ze wszystkimi przyciskami i kółkiem, dzięki IstvanV

Procedura wyzwalana przerwaniem VSYNC (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

Odczyt przycisków myszy bez korzystania z procedury

EnterMice odczytuje stan przycisków w inny sposób niż Boxsoft+Neos. W oryginalnym interfejsie zawsze można odczytać stan dwóch głównych przycisków tak samo jak styki w joysticka, wpisując 0 lub 5 do portu B5h Z80, a następnie odczytując zwróconą wartość z portu B6h. Jest to niezależne od odczytu danych o ruchach myszki.

Ponieważ mysz PS/2 przekazuje dane za pośrednictwem protokołu komunikacyjnego, przyciski myszki nie są wprost podłączone w EnterMice do odpowiednich styków, ale można pobrać ich stan w łatwy sposób poprzez zmianę poziomu linii RTS (stan wysoki co najmniej na 2 μs, później można znów ustawić zero na porcie B5h). Następnie po upływie 1,5 ms EnterMice uruchamia procedurę odczytu danych z myszki PS/2 (która trwa w najgorszym przypadku 12 ms) i w końcu na podstawie odczytanych danych ustawia właściwą wartość w porcie B6h zawierającą informacje o stanie dwóch głównych przycisków.

Przykład:

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
out (0B5h),a ;Keyboard row 0 is requested
in a, (0B6h) ;The two mouse buttons are read on bits 1 and 2

Instrukcje w innych językach

Wersja angielska

Wersja hiszpańska

Wersja niemiecka

Wersja węgierska