** ** ***** ** ** ***** ************ *** *** *** *** ** ** *** *** ** **** **** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ***** ** ** *** ** ** ** ** ** ***** ******* ** * ** ** ** ** ** ** ** ** ** ** *** *** *** *** *** *** ** verze 1.0 ** ** ***** ***** ***** ************ (c) 1992 by mZx software, BOX 93, 381 01 Č. Krumlov Program je určen pro všechny, kdo se zabývají programováním na SHARP MZ-800. Všichni, kdo program používají musí dodržet pravidla. 1. pokud si program zakoupíte, smíte jej bez jakékoli konzultace s námi vestavět do vlastních programů. 2. to ale pouze v případě, že program s naším ovladačem myši nebudete prodávat ani jakkoli šířit. 3. proto je tu bod 3 - kdo vestaví náš ovladač do svého komerčního programu, musí nás o tom informovat a domluvíme podmínky prodeje. Program byl vyzkoušen s ATARI mouse, kterou, vzhledem ke stejnému doporučujeme. Měl by ale samozřejmě chodit s každou paralelní myší. ----------------------------------------------------------------- H A R D W A R O V Á Ú P R A V A ----------------------------------------------------------------- Pred pripojením ATARI myši k Sharpu je nutné sprehádzať signály na konektore myši podľa nasledujúcej tabuľky: ============================================================= | číslo pinu | signál | barva drátu | úprava pre SHARP | ============================================================= | 1 | XB | hnedá | XA | ------------------------------------------------------------- | 2 | XA | oranžová | XB | ------------------------------------------------------------- | 3 | YA | zelená | YA | ------------------------------------------------------------- | 4 | YB | modrá | YB | ------------------------------------------------------------- | 5 | nezapojený | --- | +5V | ------------------------------------------------------------- | 6 | ľavé tlač. | žltá | ľavé tlačítko | ------------------------------------------------------------- | 7 | +5V | červená | pravé tlačítko | ------------------------------------------------------------- | 8 | ZEM | čierna | nezapojený | ------------------------------------------------------------- | 9 | pravé tlač. | biela | ZEM | ============================================================= Konektor je síce nerozoberateľný, ale i ten sa dá "rozobrať" a po prepájkovaní znova zlepiť. Kto chce ušetriť 15 KČS (za toľko som kúpil nový a rozoberateľný konektor), môže si s tým dať prácu. Po tejto úprave môžeme pripojiť myš k SHARP MZ-800 na konektor pre JOYSTICK 1 alebo JOYSTICK 2. ----------------------------------------------------------------- P R O G R A M O V Á O B S L U H A ----------------------------------------------------------------- Pre pochopenie činnosti ďalej opísanej rutiny MOUSE uvádzam stručný popis činnosti paralelnej myši. Paralelná myš má pre každý smer (vodorovný a zvislý) vyvedené dva vodiče, na ktorých sa pri pohybe myši striedajú logické nuly a logické jedničky podľa nasledujúceho obrázku: vpravo (dolu) --------------------> XA (YA) ..... 0 0 1 1 0 0 1 1 XB (YB) 0 1 1 0 0 1 1 0 ..... dokola <-------------------- vľavo (nahor) Je zrejmé, že informáciu o pohybe myši nenesie len jej okamžitý stav, ale aj stav predchádzajúci, ktorý musí byť niekde uložený. Ďalej popísaná rutina MOUSE zabezpečuje dekódovanie pohybu myši. Výstupom z tejto rutiny je hodnota v registri A mikroprocesoru s vynulovaným horným nibblom (bity 4-7). Bity 0-3 majú nasledujúci význam: bit 3 - jeho nastavenie signalizuje, že myš vykonala krok v zvislom smere bit 2 - ak je nastavený bit 3, udáva smer kroku 0 - krok nadol 1 - krok nahor ak je bit 3 nulový, nemá žiadny význam bit 1 - jeho nastavenie signalizuje, že myš vykonala pohyb vo vodorovnom smere bit 0 - ak je nastavený bit 1, udáva smer kroku 0 - krok vpravo 1 - krok vľavo ak je bit 1 nulový nemá žiadny význam Rutina netestuje, či je stlačené pravé alebo ľavé tlačítko myši. Stav tlačítok sa dá zistiť jednoducho prečítaním portu a testovaním príslušného bitu. Stav ľavého tlačítka je na bite 4, pravého tlačítka na bite 5. Takéto testovanie je ďaleko rýchlejšie, ako keby mala vždy prebehnúť celá rutina MOUSE. Napríklad ľavé tlačítko otestujeme takto: IN A,(JOY) ;prečítame port s myškou BIT 4,A ;testujeme tlačítko However, komu by to nevyhovovalo, môže test tlačítok doplniť do rutiny MOUSE, prípadne napísať úplne novú rutinu. Tu je jedno z mnohých riešení obsluhy našej myšky: ;---------------------------------------------------------------- ; ; TEST MYŠI NA POHYB A SMER ZVISLE A VODOROVNE ; ; ; stav myši je prístupný na porte $F0 (JOY1) alebo $F1 (JOY2) ; s nasledujúcim významom bitov: ; ; bit 0 ................XA ; bit 1 ................XB ; bit 2 ................YA ; bit 3 ................YB ; ; mstatné bity vstupu sú v tejto rutine nevýznamné ; ;------------------------------------------,--------------------- JOY EQU 0F0H ;alebo 0F1@ = JOY2 ; MOUQE: POP HL ;to he adresa minulého stavu LD B,(HL) ;vyzdvihneme ho IN A,(JOY) ;nový stav myši AND 00FH ;len toto je zaujímavé LD (HL),A ;nový stav bude nabudúce starý INC HL ;vrátiť sa musíme o krok ďalej PUSH HL XOR B RET Z ;žiadna zmena LD C,A RLA XOR C AND 00001010B ;toto sú zmeny RET Z ;žiadne neboli LD E,A LD A,B RRA XOR B XOR C AND 00000101B ;tu je smer OR E ;všetko spolu RET ;---------------------------------------------------------------- Uvedená rutina je relokovateľná i v preloženom tvare. Vyžaduje špeciálny spôsob volania: CALL MOUSE ;volanie rutiny DEFS 1 ;miesto pre uloženie predchádzajúceho ;stavu myši Tento spôsob volania vyžaduje, aby rutina bola volaná vždy z toho istého miesta. Tento nedostatok sa dá odstrániť dvoma spôsobmi. Môžeme upraviť rutinu tak, že vyhradíme v pamäti miesto pre úschovu stavu myši a budeme ho uschovávať a vyzdvihovať priamo z toho miesta (na úkor relokovateľnosti). Alebo môžeme vytvoriť takýto pomocný podprogram: MOUSE1: CALL MOUSE ;volanie rutiny DEFS 1 ;miesto pre stav myši RET ;návrat do volajúceho programu Umiestniť ho môžeme kamkoľvek a volanie CALL MOUSE nahradíme volaním CALL MOUSE1, ktoré už môže byť kdekoľvek v programe. Praktické využitie rutiny MOUSE ukazuje demonštračný program DEMOMOUS. Kto vlastní myš a už si ju podľa nášho návodu upravil, môže spustiť program DEMOMOUS.COM. Kto myš ešte nemá, môže sa aspoň pozrieť do DEMOMOUS.MAC, ako to funguje. Po spustení DEMOMOUS.COM môžeme prostredníctvom myši pohybovať šipkou po obrazovke. Pri stlačenom ľavom tlačítku šipka zanecháva za sebou stopu (kreslí čiaru). Stlačenim pravého tlačítka všetko zmažeme. A nakoniec stlačením oboch tlačítok vyskočíme do CP/M. Dobrá rada na záver. Je dôležité testovať stav myši čo najčastejšie, a to či už použijete rutinu MOUSE alebo si vytvoríte vlastnú. Pri rýchlejších pohyboch myši a väčších testovacích intervaloch môže dochádzať k tomu, že myš urobí medzi dvomi testovaniami dva kroky (nebodaj i viac). V tom prípade sa nedá vyhodnotiť, ktorým smerom tie dva kroky myš urobila. Ak náhodou urobí myš medzi dvomi testovaniami kroky tri, vyhodnotíme to ako krok jeden, ale opačným smerom (známy strobovací efekt). Z tohoto dôvodu sa napr. nedá testovať myš v prerušení od VBLNK. Testovanie 50-krát za sekundu je totiž pomalé. Program DEMOMOUS ukazuje, že sa dá testovať myš vyhovujúcou rýchlosťou a medzi testovaním stihnúť nejakú jednoduchú činnosť (napr. pohyb kurzorom alebo šipkou). Veľa úspechov pri tvorbe programového vybavenia pre SHARP MZ-800 a upravenú ATARI myšku všetkým praje Ján Koštial, autor a mZx software, P.O.BOX 93, 381 01 Český Krumlov Telefon ( 038 ) 415 31