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ýznam | Hex | Dec | horní byte adresy | dolní byte adresy | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Myš - tlačítka | #FADF | 64223 | - | - | - | - | - | - | 1 | 0 | - | - | 0 | - | - | - | - | - | |
Myš - osa X | #FBDF | 64479 | - | - | - | - | - | 0 | 1 | 1 | - | - | 0 | - | - | - | - | - | |
Myš - osa Y | #FFDF | 65503 | - | - | - | - | - | 1 | 1 | 1 | - | - | 0 | - | - | - | - | - | |
Joystick | #1F | 31 | - | - | - | - | - | - | - | - | 0 | 0 | 0 | - | - | - | - | - |
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ýznam | Hex | Dec | horní byte adresy | dolní byte adresy | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Myš - tlačítka | #FADF | 64223 | - | - | - | - | - | 0 | - | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | |
Myš - osa X | #FBDF | 64479 | - | - | - | - | - | 0 | - | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | |
Myš - osa Y | #FFDF | 65503 | - | - | - | - | - | 1 | - | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | |
Joystick | #1F | 31 | - | - | - | - | - | - | - | - | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
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, Arkanoid, 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í. 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 jednoduché.
Zkušenosti s výrobou Velesoftovy verze
Nejsem autorem zapojení, pouze popisuju to co jsem od Velesofta získal, ale na druhou stranu mohu popsat drobnosti, které Velesoft 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ů.
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.
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.
Seznam součástí pro výrobu verze 2005.2
součástka | hodnota |
---|---|
0R | v podstatě drátová propojka |
R1-R3, R5, R6 | 1k5 SMD 1206 |
R4 | 4k7 SMD 1206 |
R7 | odporová síť 6x 4k7 |
R8 | odporová síť 5x 4k7 |
R9-R16 | 150Ω SMD 1206 (lze použít i klasické o délce 3,5mm) |
C1-C3 | 47nF osazovat tak, aby vývody nečouhaly a nevadily patici |
C4 | 27pF (C4 a R4 generují hodiny 4MHz pro PIC) |
C5 | 100nF |
C6 | 100uF |
C7 | 10uF |
D0 | červená LED u přepínače, signalizuje Extra režim |
D1 | žlutá LED |
D2 - D8 | diody 1N4148 SMD 1206 |
P-KNX125 | dvoupolohový páčkový přepínač |
T709 | konektor cinch pro video, je-li vyvedeno na sběrnici |
CANON 9 | devítipinový canon pro připojení joysticku, nebo AMouse |
PIC16F84A-04/P | jednočip, který převádí PS/2 protokol na AMouse signály |
USB/PS2 | konektor USB, nebo PS/2, podle toho co tam budete chtít mít |
LP2950CZ-3.3V | 3,3V stabilizátor |
XILINX XC9572XL | nejdůležitější čip, v něm je naprogramováno celé rozhraní |
pinová lišta | délka dle libosti, musí vystačit na celou sběrnici plus dvě propojky |
konektor WK46580 | nebo 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 | čipset | rozhraní | tlačítek | snímač | kolečko | funkčnost | |
---|---|---|---|---|---|---|---|
Benq M100-0BP | A2610 C0337, MDT80006A1P viz obrázek |
PS/2 | 3 | optický | ano | plně funkční | |
Genius GM03006A NetScroll+ Traveler 400dpi | A1610 A0441C, CY766372 SC 0438 viz obrázek |
PS/2+USB | 3 | optický | ano | plně funkční, i s PS/2 redukcí | |
Genius NetScroll Optical 400dpi | ? | USB | 5 | optický | ano | funkční, jen 4 tlač. | |
Genius NetScroll+ Mini Traveler 800dpi | A2051 A0343C viz obrázek a ještě jeden obrázek |
PS/2+USB | 5 | optický | ano | plně funkční s PS/2 redukcí | |
Hewlett Packard C1413A | ? | PS/2 | 2 | kulička | nemá | plně funkční | |
Compaq (shodná s Logitech M869) | ? | PS/2 | 3 | kulička | ano | nefunkční | |
Manhattan | viz obrázek vnitřku myši | TTL AMouse | 3 | kulička | nemá | plně funkční | |
NEOLEC RF Optical mouse - model AirView 405RRF | viz obrázek | PS/2 | 5 | optický | ano | plně funkční, netestováno 4. tlačítko | |
Mini Optical Mouse (Shenzhen Wutai Electronics ...) | viz obrázek | PS/2+USB | 3 | optický | ano | plně funkční s PS/2 redukcí | |
Samsung optical 400dpi | viz obrázek | PS/2 | 3 | optický | ano | plně funkční | |
Genius NetScroll 110 800dpi | PAW3401DK-LH, H7490H35CSHY viz obrázek |
PS/2 | 3 | optický | ano | plně funkční |
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ší)
- Rozmístění součástek na neprokovené desce - PNG 110kB
- Rozmístení součástek na prokovené desce (KM2005) - PNG 63kB
- Rozmístení součástek na prokovené desce (KM2005-2) - PNG 58kB
Datasheety použitých čipů
- xc9572XL - PDF 67kB
- LP2950_2951.pdf - PDF 380kB
- pic16f84a.pdf.gz - PDF.GZ 820kB (komprese byla nutná, jinak by byl soubor skoro 2x větší)
Recenze myší v Sinclair User
- ftp://ftp.worldofspectrum.org/pub/sinclair/magazines/SinclairUser/Issue056/Pages/SinclairUser05600029.jpg
- SinclairUser05600029 - JPG 317kB - lokální kopie
- ftp://ftp.worldofspectrum.org/pub/sinclair/magazines/SinclairUser/Issue056/Pages/SinclairUser05600030.jpg
- SinclairUser05600030 - JPG 338kB - lokální kopie
- Adresování všelijakých periferií z velké části od Erika Kunzeho, autora emulátoru XZX, v seznamu je i původní Kempston mouse a joystick, ale nesprávně
Schémata
- Schéma původní KMouse - PNG 18kB - schéma překresleno Velesoftem při analýze originálního rozhraní
- Schéma ruské varianty - PNG 11kB - pracuje jen s TTL Amiga myší
Zdroje informací
- Velesoftův web - nejaktuálnější informace o KMouse turbo přímo od autora
- Podrobná dokumentace od Velesofta - PDF.GZIP 2,4MB
- www.worldofspectrum.org
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ší