
**       **     *****     **       **     *****     ************
***     ***   ***   ***   **       **   ***   ***   **          
****   ****  **       **  **       **  **       **  **          
** ** ** **  **       **  **       **   *****       **          
**  ***  **  **       **  **       **       *****   *******     
**   *   **  **       **  **       **  **       **  **          
**       **   ***   ***    ***   ***    ***   ***   ** 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
