Myši II. - Velesoftova KMouse

Minireportáž z výroby interface.

Úvod

Vývoj hardwaru pro ZX Spectrum neustrnul a díky Velesoftovi máme k dispozici novou verzi rozhraní, které se Vám pokusím popsat z mého pohledu. Velesoftova KMouse vychází primárně z ruské KMouse, která se používá v Pentagonech a Scorpionech, rozhraní umí pracovat s kolečkem stejně jako poslední ruský interface a podporuje i Kempston Joystick včetně možnosti připojení AMouse, přičemž port 31 je možné vypnout, aby nekolidoval s UR-4, stále hojně používaným rozhraním. Kolečko mohlo být podporováno o dost lépe, ale rusové byli první a v zájmu kompatibility jsme se nakonec povětšinou shodli na tom, že oželíme dvě kolečka, osmibitový čítač pootočení, pět tlačítek atd..., přece jenom je s úpravou softwaru mnohem víc práce, než bychom získali takovým zlepšením rozhraní. Ostatně, kolik z nás dokáže otočit kolečkem za 1/50 sekundy tak rychle, aby během té 1/50 nestačilo 16 kroků kolečka. A jak často bychom to využili. A hlavně bychom tím spotřebovali další port a těch už zbývá na ZX Spectru žalostně málo (porty spousty rozhraní se zrcadlí na mnoha dalších portech díky neúplné adresaci a spousta hloupého softwaru tato zrcadla používá, takže to pak koliduje s novým hardwarem náhodou adresovaném na některém ze zrcadlících se portů).

Historie

Poté, co jsem od Velesofta zjistil, že KMouse existovala dávno před tím, než ji začali používat rusové u svých Pentagonů jsem se trochu ptal, trochu pátral a ukázalo se, že původní rozhraní má na svědomí firma Kempston Micro Electronics Ltd viz seznam hardwaru, který dodávala pro ZX Spectrum včetně dalších odkazů. Velesoft sesbíral spoustu zajímavých podrobností, které sepsal do článků nejenom o původní Kempston Mouse, ale i o AMX Mouse a AY Mouse.

Kempston Micro Elecronics svůj interface dodávali od roku 1986, bohužel, jak už to bývalo nevyhnuli se zbytečnému šetření a jejich interface měl neúplnou adresaci, dokonce tak neúplnou, že kolidoval i s jejich vlastním Kempston Joystickem a snad až pozdější verze byly opraveny (což nevím jistě). Viz tabulka ukazující, jak bylo tehdejší rozhraní adresováno.

Bity označené pomlčkou jsou rozhraním ignorovány. Bit 7 je vlevo, bit 0 vpravo.

významHexDechorní byte adresydolní byte adresy
Myš - tlačítka#FADF64223------10 --0-----
Myš - osa X#FBDF64479-----011 --0-----
Myš - osa Y#FFDF65503-----111 --0-----
Joystick#1F31-------- 000-----

Tabulku jsem převzal z World Of Spectrum, kde byla převzata od Erika Kunzeho. O něco později jsem ji po Velesoftově upozornění mírně upravil. Týká se bitu 1 v horním bytu. V dokumentaci na WOSu je totiž chyba a reálné rozhraní se chová tak jak je uvedeno v této opravené tabulce. Uvádím spíše pro zajímavost, nové verze rozhraní mají bez výjimky adresování kompletnější. Adresy uvedené v levých sloupcích Hex a Dec platí vždy u všech variant a měly by být používány i kdyby vám rozhraní fungovalo na dalších adresách.

Následující tabulka pro srovnání ukazuje jak je adresováno současné Velesoftovo rozhraní

významHexDechorní byte adresydolní byte adresy
Myš - tlačítka#FADF64223-----0-0 11011111
Myš - osa X#FBDF64479-----0-1 11011111
Myš - osa Y#FFDF65503-----1-1 11011111
Joystick#1F31-------- 00011111

Pozor na jednu drobnost. Existují varianty rozhraní, kde je prohozeno levé a pravé tlačítko myši. Já na to přišel vcelku náhodou při testování svého softwaru ve vývojové verzi emulátoru FUSE. Jak se zdá od obou variant existuje tolik různých interfaců, že už dnes nelze říct, co je správnější. Je prostě nutné počítat s obojím. Velesoftův interface naštěstí umožňuje tlačítka v Extra módu prohodit přímo připojenou myší. Viz jeho popis.

rozhraní z pohledu softwaru

ZX Spectrum výkonem zrovna nehýří, takže když autoři rozhraní vymýšleli jak myš připojit, tak uvažovali i nad co možná nejsnazším softwarovým zpracováním a podařilo se jim vymyslet zajímavý kompromis. Na jedné straně trochu složitější rozhraní (ve srovnání s AMouse, kde se software stará úplně kompletně o všechno), na straně druhé extrémně jednoduché zpracování softwarem, kterému zbývá pouze načíst hodnotu z příslušného portu a použít ji jako souřadnici. Teda, téměř tak to funguje. Čítače bylo snadné vyrobit osmibitové, takže hodnoty vracené pro Xovou i Yovou osu jsou 0 až 255. Tím se rozhraní stává hůř použitelným v případě jiných rozměrů obrazovky než 256 pixelů.

Pokud by bylo rozlišení obrazovky větší (což není v podstatě nikdy), musel by program pracovat s odchylkou oproti minulému stavu a nikdy by nesmělo dojít k odchylce příliš velké, aby program neztratil orientaci jakým směrem se myš pohnula (případ Artistu, počítá s moc malou odchylkou a špatně funguje při rychlém pohybu myší a zvláště pak v turbo režimu Velesoftova rozhraní, je potřeba ho přepnout do pomalého režimu). Pokud je rozlišení menší než 255, což je v Yové ose víceméně vždy, pak je přepočet jednodušší. Především nehrozí ztráta orientace. Drsnější povahy samozřejmě mohou Yovou osu používat i bez přepočtu, ale kurzor bude po opuštění obrazovky horním, nebo dolním okrajem mizet, případně se chovat jinak podivně. Správný přepočet je Y = (Y * 3) / 4, protože v assembleru nemusí platit asociativita.

Software podporující kempston myš

Softwaru pro myš z počátku nebylo mnoho. rozhraní bylo na tehdejší poměry relativně drahé a využití v praxi minimální. Víme o programech Artist2, Carrier Command a Battle Command (mimochodem jeho ovladač myši je chybný). Pak existuje celá spousta ruského softwaru, který vznikal, nebo byl na myš upraven mnohem později, např. Hero Quest 1 a 2, Space Crusade, Arcanoid, Gunman, Last Courier 2, Wolf 2004, Lemmings 2, Head Ball, Moorhuhn, Sparrows, Technodrom, Walker, FastBreed, Kazmus, Shaski, King, Far Space a další...

S postupem času bude softwaru přibývat. Něco chystám já, něco upravuje Velesoft a jiní, něco možná upraví někteří z ruských programátorů, takže seznam není definitivní (spíš se pokusím připravit archiv se softwarem ke stažení). Dá se říct, že čím jednodušší univerzálnější a rozšířenější rozhraní, tím více na něj bude softwaru. Zvlášt, když je softwarové využití tohoto rozhraní tak extrémně jednoduché.

Zkušenosti s výrobou Velesoftovy verze

Nejsem autorem zapojení, pouze popisuju to co jsem od autora získal, ale na druhou stranu mohu popsat drobnosti, které autor možná považoval za samozřejmé a které by méně zručným konstruktérům, kteří mají rádi ZX Spectrum mohly pomoct.

Výroba neprokovené verze

První verzi rozhraní jsem získal jako "stavebnici", přesněji neprokovený plošný spoj, naprogramované CPLD a PIC, nákres rozmístění součástek a soubory potřebné k programování CPLD. Zbytek jsem koupil v GMe. Plošný spoj měl všechny otvory předvrtané vrtákem o průměru 0,8mm, to je trochu problém v případě pinové lišty, ta potřebuje o desetinu, nebo dvě víc, stejně tak všechny piny na propojky a otvory pro přepínač (tam záleží na konkrétním typu přepínače) a v případě konektoru PS/2, tam je potřeba 3 otvory vrtat průměrem 2 až 2,5mm - takové ty plechové packy, pro připojení země a stínění konektoru.

Neprokovených verzí nebylo rozšířeno mnoho (později jsem se dozvěděl, že snad jen dva, nebo tři kusy :-), ale na druhou stranu výroba neprokovených plošných spojů je levná, dobře dostupná a srovnání s novou verzí mi přišlo docela zajímavé. Bohužel neprokovená verze obsahuje drobné nedostatky, které byly vyřešeny až u verzí novějších.

  • Nejsou zapojené 2. a 3. tlačítko AMouse, lze snadno napravit propojením vývodů CANON pin 5 s PIC pin 10 a CANON pin 9 s PIC pin 9. Po propojení nezapomeňte připojit piny PICe přes odpor na +5V, stejně jako to je u ostatních signálů - možné řešení viz obrázek.
  • V CPLD byla drobná chybka, která způsobovala nulování Xové souřadnice, pokud bylo zároveň při pohybu vlevo a vpravo drženo pravé tlačítko. Jelikož původně nebylo tlačítko zapojeno, nebylo ani možné na chybu přijít.
  • Joystick, nebo AMouse mohou zakmitávat, pokud mají příliš dlouhý kabel. Řešeno v pozdější verzi přidáním diod a pullup odporů.
fotka desky fotka desky fotka výrobku

Výroba prokovené verze 2005.2

I druhý kousek jsem dostal jako stavebnici včetně velmi podrobného návodu, který je zde ke stažení. Dodal bych tedy jen několik drobných detailů s nimiž je třeba počítat.

Velesoft provedl několik drobných změn. Jsou upraveny spoje pod konektorem PS/2, takže je možno při osazování osadit i USB konektor pouze je třeba přeškrábnout jiný spoj (ale osobně preferuju redukci, opačné redukce jsem neviděl, takže s PS/2 konektorem to je univerzálnější). Dále není nutno ohýbat jeden vývod PICe a zapojení je doplněno o diody na vstupech z Amiga myši, která už tolik nezakmitává (s dlouhým kabelem jsou prý stále problémy, nicméně moje myš fungovala korektně). V souvislosti s tím Velesoft opravil i návrh CPLD, které ale zůstává pinově kompatibilní a plně zaměnitelné se starší verzí. A na mé naléhání je značná část pasivních součástek v SMD provedení (byl bych raději, kdyby byly SMD úplně všechny). Možná pro někoho hůř vyrobitelné, ale výsledek je rozhodně elegantnější. Interní varianta pak bude výhradně SMD.

Kromě změn souvisejících s připojením myší na rozhraní přibyl cinch pro vyvedení videa ze ZX Specter 48k (trochu mne zklamalo, že Velesoft do stavebnic dodal černý cinch, já sice nějaké žluté měl, ale bohužel rozměrově nekompatibilní), které ho mají vyveden kompozitní signál na sběrnici a tlačítko reset. Díky tomu mám u svého ZX Spectra tlačítka reset už tři, čímž se může pochlubit jen málokteré PC :-) Ostatní změny jsou spíše kosmetické. Jinak umístěné propojky a pod.

Většina nedostatků byla odstraněna, takže k osazování toho není mnoho co dodat. Dá se to celé provést i podle fotografie. Drobný problém jsem měl pouze s vývody konektoru cinch a s přepínačem, jejichž vývody jsou o něco málo větší a neprošly bez opilování prokovenými otvory. Mírně náročnější je i pájení patice pro CPLD. Ta tam sice nutně být nemusí, ale jsem klidnější, když je možno CPLD vyměnit. Stejně tak PIC. V každém případě lze CPLD přeprogramovat přes konektor osazený hned pod cinchem, takže patice tam je opravdu jen pro případ zničení čipu.

fotka desky fotka desky fotka výrobku fotka výrobku

Pár poznámek k sestavování

Pokud se rozhodnete k sestavení sami, měli byste mít k dispozici slušnou mikropáječku s tenkým hrotem. Zvlášť vhodné je to u patice pro CPLD. Její vývody je před pájením vhodné pokalafunovat, plošný spoj mírně zarovnat, aby na něm nebyly boule kovu, ale zároveň tam nějaká pájka být musí, jinak byste ji museli dodávat skrz patici (používám pájku 0,5mm). Dá se to udělat celkem v pohodě, ale rozhodně ne s pistolovou páječkou, nebo nějakým kopytem. Ostatní SMD součástky jsou proti této patici docela banální a nudné :-).

Sběrnicové konektory jsou asi největším chytákem v téhle konstrukci hned po CPLD patici. Musí být co možná nejpřesněji v rovině a zároveň musí být tak akorát hluboko, aby nebyl problém s případnou krabičkou. Nejprve je potřeba osadit pinovou lištu, ta je do desky nasazena černým plastem ze strany spojů a delší konce procházejí skrz desku. Černý konektor připájejte na nejkrajnější vývody na pinové liště zhruba 1mm hluboko a dorovnejte tak, aby osa konektoru byla kolmo k plošnému spoji. Pokud nemáte představu, tak pomůže nasazení na ZX Spectrum, nebo nějakou periferii, ale opatrně, čtyři vývody nemusí konektor udržet při vytahování.

Přímý konektor na plošném spoji se dá nasadit v podstatě jedině pokud je sám zasunutý do protikusu. Je vhodné zvolit takový protikus, který má kvalitní zámek (nejlépe plochý), aby okraje zářezu byly po zapájení rovnoběžné. To co dodává Velesoft je sice použitelné, ale pro pájení ne zcela vhodné, Velesoft za to ovšem nemůže, to co dodává, je v současnosti bohužel možná jediné v obchodech dostupné provedení tohoto konektoru. Protikusy tvořené plošným spojem mají mírnou tendenci se stáčet okolo podélné osy, což komplikuje správné umístění při pájení. Konektor by měl zůstat zasunutý do protikusu nejméně po dobu pájení spodní přístupnější strany a výsledek by měl vypadat tak, jako na fotografii.

fotka konektoru fotka konektoru

Seznam součástí pro výrobu verze 2005.2

součástkahodnota
0Rv podstatě drátová propojka
R1-R3, R5, R61k5 SMD 1206
R44k7 SMD 1206
R7odporová síť 6x 4k7
R8odporová síť 5x 4k7
R9-R16150Ω SMD 1206 (lze použít i klasické o délce 3,5mm)
C1-C347nF osazovat tak, aby vývody nečouhaly a nevadily patici
C427pF (C4 a R4 generují hodiny 4MHz pro PIC)
C5100nF
C6100uF
C710uF
D0červená LED u přepínače, signalizuje Extra režim
D1žlutá LED
D2 - D8diody 1N4148 SMD 1206
P-KNX125dvoupolohový páčkový přepínač
T709konektor cinch pro video, je-li vyvedeno na sběrnici
CANON 9devítipinový canon pro připojení joysticku, nebo AMouse
PIC16F84A-04/Pjednočip, který převádí PS/2 protokol na AMouse signály
USB/PS2konektor USB, nebo PS/2, podle toho co tam budete chtít mít
LP2950CZ-3.3V3,3V stabilizátor
XILINX XC9572XLnejdůležitější čip, v něm je naprogramováno celé rozhraní
pinová lištadélka dle libosti, musí vystačit na celou sběrnici plus dvě propojky
konektor WK46580nebo ekvivalentní pro připojení ke sběrnici ZX Spectra

Značení součástek není zcela správné. Nicméně pro orientaci postačí.

Kompatibilita s různými typy myší

Vzhledem k jednoduchosti ovládacího programu v jednočipu a především velikosti jeho paměti není zcela možné pokrýt všechny existující PS/2 a USB myši. Přesto by měla fungovat většina (resp. ty neojobyčejnější). Některé myši jsme společně s Velesoftem vyzkoušeli, jiné mohou mít identický čipset, takže by měly být funkční úplně stejně jako některá z uvedených.

Pokud nějakou myš odzkoušíte, budu rád, když mi pošlete info, abych ji mohl zařadit do seznamu a další Spectrista si ji pak podle seznamu mohl vybrat, případně se jí vyhnout.

typčipsetrozhranítlačíteksnímačkolečkofunkčnost
Benq M100-0BPA2610 C0337, MDT80006A1P
viz obrázek
PS/23optickýanoplně funkční ok
Genius GM03006A NetScroll+ Traveler 400dpiA1610 A0441C, CY766372 SC 0438
viz obrázek
PS/2+USB3optickýanoplně funkční, i s PS/2 redukcí ok
Genius NetScroll Optical 400dpi? USB5optickýanofunkční, jen 4 tlač. ok
Genius NetScroll+ Mini Traveler 800dpiA2051 A0343C viz obrázek
a ještě jeden obrázek
PS/2+USB5optickýanoplně funkční s PS/2 redukcí ok
Hewlett Packard C1413A? PS/22kuličkanemáplně funkční ok
Compaq (shodná s Logitech M869)? PS/23kuličkaanonefunkční nefunguje
Manhattanviz obrázek vnitřku myši TTL AMouse3kuličkanemáplně funkční ok
NEOLEC RF Optical mouse - model AirView 405RRFviz obrázek PS/25optickýanoplně funkční, netestováno 4. tlačítko ok
Mini Optical Mouse (Shenzhen Wutai Electronics ...)viz obrázek PS/2+USB3optickýanoplně funkční s PS/2 redukcí ok
Samsung optical 400dpiviz obrázek PS/23optickýanoplně funkční ok
Genius NetScroll 110 800dpiPAW3401DK-LH, H7490H35CSHY
viz obrázek
PS/23optickýanoplně funkční ok

Pár poznámek k ovladači se šipkou

Ovladač, který zde lze stáhnou (viz odkaz na konci textu) jsem postupně vyvinul z ovladače, který byl uveřejněn ve známé knížce Assembler a ZX Spectrum II od Proximy. Nejprve jsem ho doplnil o možnost používat k hýbání šipkou AMouse, později KMouse a hlavně o jakési standardizované (z mého pohledu a z pohledu těch programů, kde je použit) rozhraní. Z pohledu volajícího programu totiž stačí nastavit adresu tabulky se souřadnicemi ikon, s ovládacími klávesami a případně zkratkovými klávesami (hotkeys) a zavolat ovladač. Je-li kliknuto, pak ovladač skočí na obslužnou rutinu k té ikoně na níž bylo kliknuto, jinak pokračuje v zobrazování šipky. Stejně tak při stisknutí hotkey.

Hezky to je vidět z testovacího programu, uvádím jen jeho relevantní část. Ostatní volané knihovny jsou vcelku nezajímavé, print.za funguje asi jako RST 16 a TEXTOUT, INKEY3 vrací v A znak stisknuté klávesy, OBRAZEK zobrazí tři veliké ikony na souřadnicích jako jsou v tabulce IKONY a zbytek je jasný a nepotřebuje komentář. Kliknutím na ikonu se symbolem kurzoru se kurzor změní, po stisknutí zkratkové klávesy 1, 2 a ENTER bude vypsán text a kurzor se změní na hodiny, dokud uživatel znovu nestiskne nějakou klávesu. No a při otočení kolečkem myši nad ikonou bude změněn okraj obrazovky na stejnou barvu jako má ikona. Ukončit program je možné kliknutím na ikonu v levém horním rohu.

;==============================================================================
;  DEMO PROGRAM PRO ŠIPKU - verze 2
;==============================================================================
;
; Tento program slouží spíš k vývoji a testování driveru mouse2, nikoliv k testování
; funkčnosti hardwaru. K tomu existují jiné specializované utilitky.
;

		cpu	z80undoc
		org	32768


START		di
		push	ix
		push	iy
		exx
		push	hl			; HL' nutno zachovat kvůli Basicu, dělal by problémy
		exx

		ld	hl,IKONY		; nastavím adresu tabulky ikon
		ld	(MOUSE_ICONS),hl
		ld	hl,MOUSE_SIPKA		; nastavím adresu kurzoru (výchozí)
		ld	(MOUSE_CURSOR),hl
		ld	hl,SIPKA_KEYTAB		; nastavím adresu tabulky ovládacích kláves
		ld	(MOUSE_KEYTAB),hl
		ld	hl,SIPKA_HOTKEYS	; nastavím adresu tabulky "horkých" kláves
		ld	(MOUSE_HKEYTAB),hl
		ld	hl,FONT			; nastavím adresu fontu, kterým se bude vypisovat na obrazovku
		ld	(PRINT_FNA),hl
		call	CONTROLS		; zavolám menu s volbou ovládání
		call	CLS
		call	OBRAZEK			; zobrazím obrázek s ikonami
		ld	a,7
		out	(254),a
		jp	CALLMOUSE

END		call	BEEP
		exx
		pop	hl
		exx
		pop	iy
		pop	ix
		ei
		ret

;==============================================================================
; reakce na kliknutí, stisk tlačítek "fire", otočení kolečkem ...
;==============================================================================

BORDER1		ld	a,1			; reakce na kliknutí, kolečko ... jsou většinou barvy borderu
		out	(254),a
		jp	CALLMOUSE

BORDER2		ld	a,2
		out	(254),a
		jp	CALLMOUSE

BORDER3		ld	a,3
		out	(254),a
		jp	CALLMOUSE

BORDER4		ld	a,4
		out	(254),a
		jp	CALLMOUSE

BORDER5		ld	a,5
		out	(254),a
		jp	CALLMOUSE

BORDER6		ld	a,6
		out	(254),a
		jp	CALLMOUSE

SPRSIPKA	ld	hl,MOUSE_SIPKA
		ld	(MOUSE_CURSOR),hl
		jp	CALLMOUSE

SPRHODINY	ld	hl,MOUSE_WAITC
		ld	(MOUSE_CURSOR),hl
		jp	CALLMOUSE

SPRTEXT		ld	hl,MOUSE_INPUTC
		ld	(MOUSE_CURSOR),hl
		jp	CALLMOUSE

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

HOTKEY1		ld	hl,HOTKEY_TXT1			; zpracování horkých kláves
		jr	HOTKEY_COMMON

HOTKEY2		ld	hl,HOTKEY_TXT2
		jr	HOTKEY_COMMON

HOTKEY3		ld	hl,HOTKEY_TXT3
		jr	HOTKEY_COMMON

HOTKEY_COMMON	call	TEXTOUT				; zobrazím text
		ld	hl,MOUSE_WAITC			; zobrazím hodiny
		ld	(MOUSE_CURSOR),hl
		call	MOUSE_DRAW
		call	PAUSENK				; čekám dokud uživatel nepustí klávesu
		call	PAUSE0
		ld	hl,MOUSE_SIPKA			; nastavím šipku a smažu hodiny
		ld	(MOUSE_CURSOR),hl
		call	MOUSE_CLEAR
		ld	hl,HOTKEY_TXTCLR		; smažu vypsaný text
		call	TEXTOUT
		jp	CALLMOUSE

HOTKEY_TXT1	db	22, 23, 0, "Stisknuta horká klávesa 1", 0
HOTKEY_TXT2	db	22, 23, 0, "Stisknuta horká klávesa 2", 0
HOTKEY_TXT3	db	22, 23, 0, "Stisknuta horká klávesa ENTER", 0
HOTKEY_TXTCLR	db	22, 23, 0, "                             ", 0

;------------------------------------------------------------------------------
; TABULKY IKON A KLÁVES
;------------------------------------------------------------------------------

IKONY		db	0,15,0,15		; (x1,x2,y1,y2)
		dw	END
		dw	BORDER2
		db	32,64,16,48
		dw	SPRSIPKA
		dw	BORDER6
		db	72,104,16,48
		dw	SPRHODINY
		dw	BORDER5
		db	112,144,16,48
		dw	SPRTEXT
		dw	BORDER4
		db	255			; konec tabulky ikon

SIPKA_KEYTAB	db	254, 127, 00000100b	; FIRE 1		(M)
		dw	MOUSE_KFIRE1
		db	254, 127, 00001000b	; FIRE 2		(N)	(nepovinné)
		dw	MOUSE_KFIRE2
		db	254, 127, 00010000b	; FIRE 3		(B)	(nepovinné)
		dw	MOUSE_KFIRE3
		db	254, 223, 00000010b	; LEFT			(O)
		dw	MOUSE_KLEFT
		db	254, 223, 00000001b	; RIGHT			(P)
		dw	MOUSE_KRIGHT
		db	254, 251, 00000001b	; UP			(Q)
		dw	MOUSE_KUP
		db	254, 253, 00000001b	; DOWN			(A)
		dw	MOUSE_KDOWN
		db	254, 251, 00000010b	; SCROLL UP		(W)	(nepovinné) kolečko nahoru
		dw	MOUSE_KWH_INC
		db	254, 253, 00000010b	; SCROLL DOWN		(S)	(nepovinné) kolečko dolů
		dw	MOUSE_KWH_DEC
		db	255

SIPKA_HOTKEYS	db	254, 247, 00000001b	; nápis 1		(1)	příklad tabulky horkých kláves
		dw	HOTKEY1
		db	254, 247, 00000010b	; nápis 2		(2)
		dw	HOTKEY2
		db	254, 191, 00000001b	; překreslení obrazovky	(ENTER)
		dw	HOTKEY3
		db	255

;------------------------------------------------------------------------------
; VOLBA OVLÁDÁNÍ (KEYBOARD, AMOUSE, KMOUSE)
;------------------------------------------------------------------------------

CONTROLS	ld	a,64+7
		ld	(CLS_COL),a
		call	CLS
		ld	hl, CONTR_TXT
		call	TEXTOUT
CONTROLS0	call	BEEP
		call	PAUSENK		; počkej dokud uživatel nepustí klávesu
		call	INKEY
		cp	49
		jr	z,CONTR_KB	; uživatel zvolil klávesnici
		cp	50
		jr	z,CONTR_AM	; uživatel zvolil AMOUSE
		cp	51
		jr	z,CONTR_KM	; uživatel zvolil KMOUSE
		cp	113
		jr	z,CONTRQUIT	; uživatel zvolik konec programu
		jr	CONTROLS0

CONTR_KB	xor	a
		jr	CONTR_END

CONTR_AM	ld	a,1
		jr	CONTR_END

CONTR_KM	ld	a,2
CONTR_END	ld	(MOUSE_HID),a
		call	PAUSENK		; počkám až uživatel pustí klávesu ... zafungovala by v zápětí jako hotkey
		ret

CONTRQUIT	pop	hl		; vezmu ze zásobníku návratovou adresu
		jp	END

CONTR_TXT	db	22,0,0, "Volba ovládání:", 13, "---------------"
		db	22,3,0, "1/ ovládání klávesnicí", 13, "OPQA směry MNB fire WS scroll"
		db	22,6,0, "2/ Amiga Mouse - TTL myš", 13, "zapojená v UR-4 - port 31"
		db	22,9,0, "3/ Kempston Mouse s kolečkem",13 , "ruská nebo Velesoftova verze"
		db	22,12,0, "Q/ Konec programu"
		db	22,20,0, "Ukončovací ikona je v levém", 13, "horním rohu obrazovky."
		db	22,23,9, "http://cygnus.speccy.cz"
		db	0

;==============================================================================
; EXTERNÍ KNIHOVNY
;==============================================================================

		include		libs/mouse2.za
		include		libs/downhl.za
		include		libs/print.za
		include		libs/inkey3.za
		include		libs/cls.za
		include		libs/beep.za

FONT		binclude	libs/font_iso8859-2_8x8.bin
OBRAZEK		binclude	ikony.pressor5

Občas je potřeba znát o něco víc než jen to, že bylo na ikonu kliknuto. Takže proměnná MOUSE_BUTTONS obsahuje stav tlačítek v bitech 0 až 3, bit 7 je vyhrazen pro identifikaci stisknutí hotkey, proměnná MOUSE_WHEEL obsahuje stav kolečka - o kolik jím bylo pootočeno a jakým směrem od posledního spuštění ovladače a MOUSE_XY přesné souřadnice šipky při ukončení ovladače. Ostatní si můžete přečíst v komentářích zdrojáku.

Závěr

Po několika týdenním zkoušení KMouse interface jsem nenašel v podstatě nic, co by se mu dalo vytknout. Práce s myší u ZX Spectra se z pohledu softwaru stává velmi příjemně jednoduchou a rychlou, PS/2 myší je velký výběr, spousta levných modelů myší od různých výrobců má stejný (příp. kompatibilní) čipset jako některá z uvedených, výjimkou jsou snad jen myši Logitech. Způsob konfigurace za provozu je perfektní, kompatibilita s AMouse dokonalá, rozhraní je malé, elegantní a levné. Díky za něj.

Download

Rozmístění součástek (od nejstarší po nejnovější)

Datasheety použitých čipů

Recenze myší v Sinclair User

Schémata

Zdroje informací

Utilitky

  • KMouse-tester - velmi jednoduchý testovací program
  • Ovladač šipky - BZ2 7,5kB - ovladač se šipkou podporující třítlačítkovou KMOUSE s kolečkem, třítlačítkovou AMOUSE a klávesnici (kolečko emulováno klávesami W a S), možno libovolně přepínat tabulky ikon, pro každou ikonu lze definovat rozdílnou reakci na kolečko, nebo tlačítka, k dispozici 3 předdefinované kurzory (šipka, hodiny, symbol editace textu), lze nastavit libovolné klávesové ovládání a sadu horkých kláves, které budou detekovány současně s libovolným ovládáním

Opravené chyby:

  • 28.8.2005 - odstraněno nesmyslné tvrzení o nemožnosti provozovat TTL AMouse společně s PS/2 myší, jde to, v nové i starší verzi v podstatě stejně, jelikož PIC má výstupy s otevřeným kolektorem a interní pull-up odpory, tak ho prostě AMouse přetáhne a naopak, jediný problém tedy je v tom, že se přetahují navzájem a CPLD tak dostává (může dostávat hýbete-li oběma myšima zároveň) nesmyslné signály na vstupu, ale obvody se tím nepoškodí, zároveň jsem trochu zrevidoval text a odstranil zbytečnosti
  • 30.12.2005 - text prohlášen za dokončený, v zásadě nemám co doplnit
  • 9.7.2006 - aktualizován ovladač myši, zdroják doplněn testovacím programem, ostatní viz ChangeLog, v souvislosti s vylepšeným ovladačem aktualizována i ukázka kódu, který ovladač používá a jeho stručný popis.
  • 12.7.2006 - otestoval jsem další myšky, přidáno do tabulky
  • 7.5.2008 - lehce aktualizován seznam funkčních myší

[ Zpět na hlavní stránku ]

Cygnusova stránka o ZX Spectru a kompatibilních počítačích byla napsána (přepsána) výhradně pomocí svobodného Open Source softwaru. V případě že naleznete chybu, nebo byste rádi cokoliv co se ZX Spectrem souvisí, neváhejte mi napsat na některý z mých emailů, nebo pracovně do zaměstnání. Stručně o mém webu se můžete dočíst zde.