Ovladač sběrnicové myši typu MOUSE602

Myš uvedeného typu využívá k přenosu informací o pohybu do počítače celkem čtyř signálů. Pro vodorovný směr dva a pro svislý směr rovněž dva. Pak jsou samozřejmě k dispozici i signály, nesoucí informaci o tom, zda bylo stisknuto některé z tlačítek myši, ovšem jejich čtení a interpretace nečiní v praxi žádný problém a proto se jimi prozatím nebudeme zabývat.

Ony dva signály pro každý směr představují dva obdélníkové signály (při pohybu myší), navzájem posunuté o 90°. Pak se dá analýzou této dvojice signálů rozpoznat směr pohybu. Metod je mnoho, já jsem použil takovou, kdy jsem do spodní čtveřice bitů v bajtu umístil nový stav všech čtyř pohybových signálů a do horní čtveřice bitů v bajtu jsem umístil starý stav všech čtyř pohybových signálů. Takto sestavený bajt ukazuje do tabulky o délce 256 bajtů, jejíž prvky mají vhodně nadefinovány kódy 0..9, které znamenají: 0=myš se nehýbe, 1=sever, 2=severovýchod, 3=východ, … 8=severozápad, 9=neplatný stav (přeskok dvou fází). Tato metoda má výhodu v maximální možné rychlosti, nevýhodou je právě velikost té nahlížecí tabulky. Ale v množství ostatního potřebného kódu se velikost té tabulky jeví jako nevýznamná. Samotný kód ovladače je samozřejmě hutnější a kompaktnější ale princip je tento.

Samotný ovladač nabízí následující procedury:

  • Procedura „MYSACT“: Aktivace kurzoru myši. Provede test adresy kurzoru myši, zda se nachází ve videoram. Pokud ne, nastaví kurzor myši doprostřed obrazovky. Dále se uschová pozadí pod kurzorem myši a nakonec se zobrazí samotný kurzor myši. Nic jiného tato procedura nedělá.
  • Procedura „MYSDEA“: Obsah buferu pozadí pod kurzorem myši zobrazí na pozici tohoto kurzoru, čímž se kurzor ztratí a objeví se původní obsah obrazovky. Opět se nic jiného neděje a jedná se pouze o grafickou operaci zhasnutí kurzoru myši.
  • Procedura „MYSRUN“: Tuto proceduru možno též volat instrukcí RST 7. Procedura otestuje případný pohyb myši a v kladném případě posune kurzor myši požadovaným směrem. S ohledem na nízkou rychlost PMD-85 je nutno tuto proceduru volat stále dokola bez zbytečného prodlení aby nedocházelo ke ztrátě dat směrem od myši k CPU. Po návratu z této procedury obsahuje příznak CY hodnotu 1 v případě stisku pravého tlačítka myši a příznak S hodnotu 1 v případě stisku levého tlačítka myši.
  • Funkce „MYSCOR“: V registru ACC vrací aktuální Y-souřadnici kurzoru myši. V registrovém páru H:L vrací X-souřadnici kurzoru myši. Záměrným bodem kurzoru myši se rozumí levý horní rozsvícený pixel myši (špička šipky).

Kurzor se vykresluje jako šikmá šipka s jednopixelovou mezerou po obvodě, přičemž korektně pracuje s pozadím obrazovky. Proto je nutný i bufer pro úschovu tohoto pozadí a poněkud složitý mechanismus rotací tohoto buferu při pohybu kurzoru myši.

Ovladač kvůli rychlosti začíná na adrese 0038h a má striktní požadavky na umístění jednotlivých částí kódu. Například tabulka přechodových stavů musí začínat na adrese s nulovým spodním bajtem, stejně tak tabulka s ofsety a samotnými animačními fázemi kurzoru myši, atd. Je to daň za fakt, že ovladač myši vůbec jede s rozumnou odezvou. Pokud tedy nemusíte, nechte ovladač myši jako první programový blok od zmíněné adresy 0038h a své programy, které knihovnu myši využívají, pište až za ovladač myši. RST vektory 0 až 6 jsou vám tak plně k dispozici.

V emulátoru PMD-85 od RM-Teamu do verze 3.0.1.142 prozatím existuje podpora pouze pod verzí PMD 85-1, na fyzickém hardware myš funguje na všech verzích (ověřeno na fyzickém stroji PMD 85-2A). Díky faktu, že PMD-85 přepíná oddělovač rozšiřující sběrnice směrem k CPU pro všechny I/O adresy s hodnotou 1xxx11xx (binárně) kvůli zabránění kolize s interními periferními obvody, lze tento oddělovač sběrnice použít i jako vstupní port a výstupní signály myši připojit přímo na vstupní datové vodiče rozšiřující sběrnice. Jen je dobré použít sériové oddělovací odpory o velikosti zhruba 4k7. Signály tlačítek je nutno invertovat a použít PULL-UP rezistory, neboť zmíněný oddělovač sběrnice je neobsahuje a myš z historických důvodů rovněž ne. Bez těchto PULL-UP odporů jsou signály tlačítek nestabilní a kmitají. Pokud použijete tranzistorové invertory, pak je jejich principiální součástí i ten PULL-UP rezistor a je to OK.

Tělo procedury MYSRUN, tedy ta část programu, která určuje „rychlost“ pohybu myši, trvá od 1517T CPU do 3565T CPU podle směru pohybu myši. Tomu odpovídá testovací frekvence 482 až 1134Hz. Na základě praktických zkoušek na skutečném hardware mohu potvrdit, že na internetu uváděná minimální požadovaná frekvence testů stavu clonek myši o hodnotě zhruba 500 testů za vteřinu je adekvátní. Od této četnosti testování pohybu myši směrem nahoru lze hovořit o komfortní odezvě. Vůbec však nejde o rychlost pohybu myši jako takovou, spíše jde o to, že při nižší rychlosti testování CPU občas nezaregistruje některé stavy clonek, následně další stav zákonitě vyhodnotí jako neplatný a kurzor myši se pak spíše třese na místě a nepohybuje se rovnoměrně.

Zdrojový kód testovacího programu pro kreslení pomocí myši

Zdrojový kód knihovny pro ovládání myši 602

Testovací program pro kreslení myší (soubor virtuální MGF pásky pro emulátor od RM-Teamu)

 

Průmět kurzoru myši

HelloWorld

9 komentářů u „Ovladač sběrnicové myši typu MOUSE602

  1. Libor L.A.

    Ovladač MOUSE602 je hotov a ani to moc nebolelo. Myslím, že má dostatečnou výkonovou rezervu na nějakou menší současnou animaci. Tím narážím na použití tohoto ovladače myši v připravované hře FF.

  2. Libor L.A.

    Tak jsem zkoušel ATARI ST myš připojenou ke skutečnému PMD-85 ve stylu MYŠ602 a ta rychlost je na hraně. Tedy spíše pod hranou. Není to úplná tragédie ale při trochu rychlejších gestech prostě CPU nestíhá. Signály myši jsem připojil jen přes odpory 4k7 přímo na datové linky expanzního portu. Signály tlačítek bude třeba invertovat – ale princip je OK. Asi zkusím udělat alternativní ovladač, kde se vykašlu na kurzor, který „jede“ nad pozadím a udělám sprostý XOR. Tím bych měl drasticky navýšit rychlost odezvy na pohyb myši. Když jsem měřil odezvu (2500-4000T) na pohyb myši, tak detekce pohybu myši dělá odhadem 150T a zbytek žere animace kurzoru..

    1. Libor L.A.

      Cvičně jsem se pokusil udělat nějaké optimalizace a ejhle, většinu sekvencí jsem srazil na 60-70% původní délky. Takže asi tu optimalizaci pečlivě dokončím a znovu vyzkouším na skutečném železe, které nemá bufer pro pohyb myši..

  3. RomBor

    Pre zaujímavosť, tu je scan návodu k myši 3 WN 16605 a jej schéma zapojenia a schéma, ako som ju ja pripojil k PMD 85.
    https://pmd85.borik.net/_work/3WN16605.zip
    Nepamätám si to síce úplne presne, keďže to bolo už pomerne dávno, ale keď som skúšal tú myš na PMD 85-1 s programom GREDIT16, tak sa mi marí, že to v ňom išlo celkom uspokojivo.

    1. Libor L.A.

      Super, díky za to schéma. Proč se vlastně neguje polarita tlačítek, když jednodušší je spínat tlačítka proti zemi? Je to jen kvůli kompatibility s jediným SW pro PMD-85, který to tak používá? Jinak zapojení mám stejné jako Ty. Jen jsem tam dal na ty datové linky sériové ochranné odpory kvůli zpětnému zápisu na port 8Ch (ne že bych tam něco zapisoval, ale pro jistotu). Já jsem zkoušel myš z ATARI ST a ta nemá PULL-UPy na tlačítkových signálech a trochu to kmitá při nestisknutých tlačítkách. Přeci jen se očekávalo, že ty PULL-UPy bude mít v sobě počítač a ne JOYSTICK nebo myš. Jinak signály clonek jsou u té myši prohnány čtyřnásobným komparátorem tuším LM339 a tudíž tyto signály PULL-UPy již nepotřebují.

      1. RomBor

        Tlačidlá sú aktívne v log.1, pretože bola takto Myš 602 navrhnutá. To znamená, že som to bral ako fakt a takto bola emulácia napísaná.

  4. Libor L.A.

    S poslední verzí ovladače myši, která je už dostupná ke stažení, jsem spokojen. Tímto považuji akci myš za dořešenou. Alespoň do té doby, než se na něco přijde.

    1. Libor L.A.

      Přeci jen ještě +5% výkonu při bočních posunech a s tím spojené mírné zkrácení kódu ovladače. Upravil jsem jak zdrojový kód ovladače v textové podobě, tak i soubor virtuální MGF pásky s demem.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.