{"id":610,"date":"2018-06-25T20:07:20","date_gmt":"2018-06-25T19:07:20","guid":{"rendered":"https:\/\/www.pmd85.cz\/?page_id=610"},"modified":"2018-06-29T20:40:48","modified_gmt":"2018-06-29T19:40:48","slug":"ovladac-sbernicove-mysi-typu-mouse602","status":"publish","type":"page","link":"https:\/\/www.pmd85.cz\/?page_id=610","title":{"rendered":"Ovlada\u010d sb\u011brnicov\u00e9 my\u0161i typu MOUSE602"},"content":{"rendered":"<p>My\u0161 uveden\u00e9ho typu vyu\u017e\u00edv\u00e1 k p\u0159enosu informac\u00ed o pohybu do po\u010d\u00edta\u010de celkem \u010dty\u0159 sign\u00e1l\u016f. Pro vodorovn\u00fd sm\u011br dva a pro svisl\u00fd sm\u011br rovn\u011b\u017e dva. Pak jsou samoz\u0159ejm\u011b k dispozici i sign\u00e1ly, nesouc\u00ed informaci o tom, zda bylo stisknuto n\u011bkter\u00e9 z tla\u010d\u00edtek my\u0161i, ov\u0161em jejich \u010dten\u00ed a interpretace ne\u010din\u00ed v praxi \u017e\u00e1dn\u00fd probl\u00e9m a proto se jimi prozat\u00edm nebudeme zab\u00fdvat.<\/p>\n<p>Ony dva sign\u00e1ly pro ka\u017ed\u00fd sm\u011br p\u0159edstavuj\u00ed dva obd\u00e9ln\u00edkov\u00e9 sign\u00e1ly (p\u0159i pohybu my\u0161\u00ed), navz\u00e1jem posunut\u00e9 o 90\u00b0. Pak se d\u00e1 anal\u00fdzou t\u00e9to dvojice sign\u00e1l\u016f rozpoznat sm\u011br pohybu. Metod je mnoho, j\u00e1 jsem pou\u017eil takovou, kdy jsem do spodn\u00ed \u010dtve\u0159ice bit\u016f v bajtu um\u00edstil nov\u00fd stav v\u0161ech \u010dty\u0159 pohybov\u00fdch sign\u00e1l\u016f a do horn\u00ed \u010dtve\u0159ice bit\u016f v bajtu jsem um\u00edstil star\u00fd stav v\u0161ech \u010dty\u0159 pohybov\u00fdch sign\u00e1l\u016f. Takto sestaven\u00fd bajt ukazuje do tabulky o d\u00e9lce 256 bajt\u016f, jej\u00ed\u017e prvky maj\u00ed vhodn\u011b nadefinov\u00e1ny k\u00f3dy 0..9, kter\u00e9 znamenaj\u00ed: 0=my\u0161 se neh\u00fdbe, 1=sever, 2=severov\u00fdchod, 3=v\u00fdchod, &#8230; 8=severoz\u00e1pad, 9=neplatn\u00fd stav (p\u0159eskok dvou f\u00e1z\u00ed). Tato metoda m\u00e1 v\u00fdhodu v maxim\u00e1ln\u00ed mo\u017en\u00e9 rychlosti, nev\u00fdhodou je pr\u00e1v\u011b velikost t\u00e9 nahl\u00ed\u017eec\u00ed tabulky. Ale v mno\u017estv\u00ed ostatn\u00edho pot\u0159ebn\u00e9ho k\u00f3du se velikost t\u00e9 tabulky jev\u00ed jako nev\u00fdznamn\u00e1. Samotn\u00fd k\u00f3d ovlada\u010de je samoz\u0159ejm\u011b hutn\u011bj\u0161\u00ed a kompaktn\u011bj\u0161\u00ed ale princip je tento.<\/p>\n<p>Samotn\u00fd ovlada\u010d nab\u00edz\u00ed n\u00e1sleduj\u00edc\u00ed procedury:<\/p>\n<ul>\n<li>Procedura &#8222;MYSACT&#8220;: Aktivace kurzoru my\u0161i. Provede test adresy kurzoru my\u0161i, zda se nach\u00e1z\u00ed ve videoram. Pokud ne, nastav\u00ed kurzor my\u0161i doprost\u0159ed obrazovky. D\u00e1le se uschov\u00e1 pozad\u00ed pod kurzorem my\u0161i a nakonec se zobraz\u00ed samotn\u00fd kurzor my\u0161i. Nic jin\u00e9ho tato procedura ned\u011bl\u00e1.<\/li>\n<li>Procedura &#8222;MYSDEA&#8220;: Obsah buferu pozad\u00ed pod kurzorem my\u0161i zobraz\u00ed na pozici tohoto kurzoru, \u010d\u00edm\u017e se kurzor ztrat\u00ed a objev\u00ed se p\u016fvodn\u00ed obsah obrazovky. Op\u011bt se nic jin\u00e9ho ned\u011bje a jedn\u00e1 se pouze o grafickou operaci zhasnut\u00ed kurzoru my\u0161i.<\/li>\n<li>Procedura &#8222;MYSRUN&#8220;: Tuto proceduru mo\u017eno t\u00e9\u017e volat instrukc\u00ed RST 7. Procedura otestuje p\u0159\u00edpadn\u00fd pohyb my\u0161i a v kladn\u00e9m p\u0159\u00edpad\u011b posune kurzor my\u0161i po\u017eadovan\u00fdm sm\u011brem. S ohledem na n\u00edzkou rychlost PMD-85 je nutno tuto proceduru volat st\u00e1le dokola bez zbyte\u010dn\u00e9ho prodlen\u00ed aby nedoch\u00e1zelo ke ztr\u00e1t\u011b dat sm\u011brem od my\u0161i k CPU. Po n\u00e1vratu z t\u00e9to procedury obsahuje p\u0159\u00edznak CY hodnotu 1 v p\u0159\u00edpad\u011b stisku prav\u00e9ho tla\u010d\u00edtka my\u0161i a p\u0159\u00edznak S hodnotu 1 v p\u0159\u00edpad\u011b stisku lev\u00e9ho tla\u010d\u00edtka my\u0161i.<\/li>\n<li>Funkce &#8222;MYSCOR&#8220;: V registru ACC vrac\u00ed aktu\u00e1ln\u00ed Y-sou\u0159adnici kurzoru my\u0161i. V registrov\u00e9m p\u00e1ru H:L vrac\u00ed X-sou\u0159adnici kurzoru my\u0161i. Z\u00e1m\u011brn\u00fdm bodem kurzoru my\u0161i se rozum\u00ed lev\u00fd horn\u00ed rozsv\u00edcen\u00fd pixel my\u0161i (\u0161pi\u010dka \u0161ipky).<\/li>\n<\/ul>\n<p>Kurzor se vykresluje jako \u0161ikm\u00e1 \u0161ipka s jednopixelovou mezerou po obvod\u011b, p\u0159i\u010dem\u017e korektn\u011b pracuje s pozad\u00edm obrazovky. Proto je nutn\u00fd i bufer pro \u00faschovu tohoto pozad\u00ed a pon\u011bkud slo\u017eit\u00fd mechanismus rotac\u00ed tohoto buferu p\u0159i pohybu kurzoru my\u0161i.<\/p>\n<p>Ovlada\u010d kv\u016fli rychlosti\u00a0za\u010d\u00edn\u00e1 na adrese 0038h a m\u00e1 striktn\u00ed po\u017eadavky na um\u00edst\u011bn\u00ed jednotliv\u00fdch \u010d\u00e1st\u00ed k\u00f3du. Nap\u0159\u00edklad tabulka p\u0159echodov\u00fdch stav\u016f mus\u00ed za\u010d\u00ednat na adrese s nulov\u00fdm spodn\u00edm bajtem, stejn\u011b tak tabulka s ofsety a samotn\u00fdmi anima\u010dn\u00edmi f\u00e1zemi kurzoru my\u0161i, atd. Je to da\u0148 za fakt, \u017ee ovlada\u010d my\u0161i v\u016fbec jede s rozumnou odezvou. Pokud tedy nemus\u00edte, nechte ovlada\u010d my\u0161i jako prvn\u00ed programov\u00fd blok od zm\u00edn\u011bn\u00e9 adresy 0038h a sv\u00e9 programy, kter\u00e9 knihovnu my\u0161i vyu\u017e\u00edvaj\u00ed, pi\u0161te a\u017e za ovlada\u010d my\u0161i. RST vektory 0 a\u017e 6 jsou v\u00e1m tak pln\u011b k dispozici.<\/p>\n<p>V emul\u00e1toru PMD-85 od RM-Teamu do verze 3.0.1.142 prozat\u00edm existuje podpora pouze pod verz\u00ed PMD 85-1, na fyzick\u00e9m hardware\u00a0my\u0161 funguje na v\u0161ech verz\u00edch (ov\u011b\u0159eno na fyzick\u00e9m stroji PMD 85-2A). D\u00edky faktu, \u017ee PMD-85 p\u0159ep\u00edn\u00e1 odd\u011blova\u010d roz\u0161i\u0159uj\u00edc\u00ed sb\u011brnice sm\u011brem k CPU pro v\u0161echny I\/O adresy s hodnotou 1xxx11xx (bin\u00e1rn\u011b) kv\u016fli zabr\u00e1n\u011bn\u00ed kolize s intern\u00edmi perifern\u00edmi obvody, lze tento odd\u011blova\u010d sb\u011brnice pou\u017e\u00edt i jako vstupn\u00ed port a v\u00fdstupn\u00ed sign\u00e1ly my\u0161i p\u0159ipojit p\u0159\u00edmo na vstupn\u00ed datov\u00e9 vodi\u010de roz\u0161i\u0159uj\u00edc\u00ed sb\u011brnice. Jen je dobr\u00e9 pou\u017e\u00edt s\u00e9riov\u00e9 odd\u011blovac\u00ed odpory o velikosti zhruba 4k7. Sign\u00e1ly tla\u010d\u00edtek je nutno invertovat a pou\u017e\u00edt PULL-UP rezistory, nebo\u0165 zm\u00edn\u011bn\u00fd odd\u011blova\u010d sb\u011brnice je neobsahuje a my\u0161 z historick\u00fdch d\u016fvod\u016f rovn\u011b\u017e ne. Bez t\u011bchto PULL-UP odpor\u016f jsou sign\u00e1ly tla\u010d\u00edtek nestabiln\u00ed a kmitaj\u00ed. Pokud pou\u017eijete tranzistorov\u00e9 invertory, pak je jejich principi\u00e1ln\u00ed sou\u010d\u00e1st\u00ed i ten PULL-UP rezistor a je to OK.<\/p>\n<p>T\u011blo procedury MYSRUN, tedy ta \u010d\u00e1st programu, kter\u00e1 ur\u010duje &#8222;rychlost&#8220; pohybu my\u0161i, trv\u00e1 od 1517T CPU do 3565T CPU podle sm\u011bru pohybu\u00a0my\u0161i. Tomu odpov\u00edd\u00e1\u00a0testovac\u00ed frekvence 482 a\u017e 1134Hz. Na z\u00e1klad\u011b praktick\u00fdch zkou\u0161ek na skute\u010dn\u00e9m hardware mohu potvrdit, \u017ee na internetu uv\u00e1d\u011bn\u00e1 minim\u00e1ln\u00ed po\u017eadovan\u00e1\u00a0frekvence test\u016f stavu clonek my\u0161i o hodnot\u011b zhruba 500 test\u016f za vte\u0159inu je adekv\u00e1tn\u00ed. Od t\u00e9to\u00a0\u010detnosti testov\u00e1n\u00ed pohybu my\u0161i sm\u011brem nahoru lze hovo\u0159it o komfortn\u00ed odezv\u011b. V\u016fbec v\u0161ak nejde o rychlost pohybu my\u0161i jako takovou, sp\u00ed\u0161e jde o to, \u017ee p\u0159i ni\u017e\u0161\u00ed rychlosti testov\u00e1n\u00ed CPU ob\u010das nezaregistruje n\u011bkter\u00e9 stavy clonek, n\u00e1sledn\u011b dal\u0161\u00ed stav z\u00e1konit\u011b vyhodnot\u00ed jako neplatn\u00fd a kurzor my\u0161i se pak sp\u00ed\u0161e t\u0159ese na m\u00edst\u011b a nepohybuje se rovnom\u011brn\u011b.<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/m602demo.txt\" target=\"_blank\" rel=\"noopener\">Zdrojov\u00fd k\u00f3d testovac\u00edho programu pro kreslen\u00ed pomoc\u00ed my\u0161i<\/a><\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mouse602.txt\" target=\"_blank\" rel=\"noopener\">Zdrojov\u00fd k\u00f3d knihovny pro ovl\u00e1d\u00e1n\u00ed my\u0161i 602<\/a><\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mys602.zip\">Testovac\u00ed\u00a0program pro kreslen\u00ed my\u0161\u00ed (soubor virtu\u00e1ln\u00ed MGF p\u00e1sky pro emul\u00e1tor od RM-Teamu)<\/a><\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_620\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mys602crsr.gif\" target=\"_blank\" rel=\"noopener\"><img aria-describedby=\"caption-attachment-620\" loading=\"lazy\" class=\"wp-image-620 size-thumbnail\" src=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mys602crsr-150x150.gif\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-620\" class=\"wp-caption-text\">Pr\u016fm\u011bt kurzoru my\u0161i<\/p><\/div>\n<div id=\"attachment_635\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/helloworld.gif\" target=\"_blank\" rel=\"noopener\"><img aria-describedby=\"caption-attachment-635\" loading=\"lazy\" class=\"wp-image-635 size-thumbnail\" src=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/helloworld-150x150.gif\" alt=\"\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-635\" class=\"wp-caption-text\">HelloWorld<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>My\u0161 uveden\u00e9ho typu vyu\u017e\u00edv\u00e1 k p\u0159enosu informac\u00ed o pohybu do po\u010d\u00edta\u010de celkem \u010dty\u0159 sign\u00e1l\u016f. Pro vodorovn\u00fd sm\u011br dva a pro svisl\u00fd sm\u011br rovn\u011b\u017e dva. Pak jsou samoz\u0159ejm\u011b k dispozici i sign\u00e1ly, nesouc\u00ed informaci o tom, zda bylo stisknuto n\u011bkter\u00e9 z tla\u010d\u00edtek my\u0161i, ov\u0161em jejich \u010dten\u00ed a interpretace ne\u010din\u00ed v praxi \u017e\u00e1dn\u00fd probl\u00e9m a proto se [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":337,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/610"}],"collection":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=610"}],"version-history":[{"count":16,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/610\/revisions"}],"predecessor-version":[{"id":638,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/610\/revisions\/638"}],"up":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/337"}],"wp:attachment":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}