Ovladač myši typu MOUSE602

Ovladač tohoto typu myši prošel zásadním vývojem.

Prvotní ovladač, použitý ve hře Funny Fruits, sice fungoval, ovšem neumožňoval dynamickou změnu rychlosti pohybu kurzoru myši a nepodporoval volbu citlivosti myši. Výhodou byla spojitá trajektorie pohybu myši, nevýhodou omezená rychlost a značné nároky na kontinuální výpočetní čas procesoru.

Proto byla jako základ dalších aplikací vyvinuta a uvolněna verze 3. Umožňuje výběr citlivosti myši, typicky kalibrované pro emulátor (cca 300CPI), HW myši ATARI/Amiga (cca 130CPI) a historickou myš na bázi pingpongového míčku, coby relikt někdejší kutilské doby (cca 40CPI).

Popis ovladače

Ovladač sice umožňuje volat všechny použité procedury, ovšem oficiálně jsou uživateli nabízeny pouze tyto:

  • MysDriver – vlastní detekce pohybu po dobu cca 10msec
  • MysDea – smaže kurzor myši na staré pozici a obnoví pozadí pod ním
  • MysAct – vykreslí kurzor myši na nové pozici
  • MysDPISet – nastavení citlivosti myši

Kromě toho lze využívat následující proměnné systému:

  • MysX – souřadnice X kurzoru myši /word/
  • MysY – souřadnice Y kurzoru myši /word/
  • MysXMin – L doraz kurzoru myši (min 0!!!) /word/
  • MysXMax – P doraz kurzoru myši (max 281!!!) /word/
  • MysYMin – H doraz kurzoru myši (min 0!!!) /word/
  • MysYMax – D doraz kurzoru myši (max 244!!!) /word/
  • MysAdr – adresa kurzoru myši ve videoram /word/
  • MysAOld – stará adresa kurzoru myši ve videoram /word/
  • MysXCHG – nenulová hodnota udává příznak změny pozice kurzoru /byte/
  • MysRpt – počitadlo opakování ve smyčce (uživatel vždy zjistí nulovou hodnotu) /byte/
  • MysBit – ukazatel na grafickou předlohu vybraného kurzoru dle MysX /word/

Ovladač je vhodné umístit na adresu, dělitelnou 256-ti, tedy kdekoliv na XX00h. Jiné podmínky pro jeho umístění v paměti nejsou. Pokud tuto podmínku nesplníte vy, ovladač se na takovou adresu zarovná sám a před sebou nechá potřebný počet nevyužitých prázdných bajtů (z principu však maximálně 255). Klíčové části ovladače si rovněž automaticky zajišťují, že budou ležet na adresách s formátem XX00h. Proto, pokud budete modifikovat kód samotného ovladače, může se automaticky do ovladače vkládat nutný počet prázdných bajtů, aby byly zajištěny výše uvedené požadavky. Bez toho by ovladač nebyl funkční. Délka originální verze ovladače je 1619 bajtů a s jednotlivými verzemi se může měnit.

Filozofie použití ovladače je následující. Před prvním zavoláním ostatních procedur je vhodné nastavit citlivost myši pomocí procedury MysDPISet. Pokud tak neučiníte, bude použita přednastavená citlivost pro myš emulátoru PMD-85 od RM-Teamu (cca 300CPI). Následuje prvotní vykreslení kurzoru myši procedurou MysAct. Poté už ve smyčce provádíme sekvenci volání MysDriver – MysDea – MysAct. V rámci této smyčky se po návratu z procedury MysDriver může provést část uživatelského programu, ovšem velmi krátkého (z pohledu potřeby strojového času CPU). Veškeré kreslení na obrazovku je bezpečné pouze při zhasnutém kurzoru myši, tedy „PO“ volání procedury MysDea a „PŘED“ voláním procedury MysAct. Ale to je standardní postup, použitý již v MS-DOSu. Ovšem pokud si je programátor jistý, že kreslení na obrazovce nebude probíhat v místě, kde se nachází kurzor myši, může na obrazovku kreslit kdykoliv.

Vzorový příklad využití zmíněných procedur a proměnných:

	mvi a,1		; citlivost myši pro emulátor
	sta MysSensitivity
	call MysDPISet	; nastavit v ovladači
Start
	call Cls	; vymazat obrazovku
	call MysAct	; aktivovat kurzor myši
	call MouseKeyRelease ; počkat na uvolnění tlačítek
Loop
	call MysDriver	; volat cca 10ms ježdění myší
	jm ClickLeft	; test stisku L-tlačítka myši
	jc Start	; test stisku P-tlačítka myši
Refresh
	lda MysXCHG	; test změny souřadnic
	ana a
	jz Loop		; nebyla změna => testuji ve smyčce pohyb myši
	call MysDea	; byla změna => smažu kurzor myši na staré pozici
	...        	; zde možno bezpečně vykreslit něco na obrazovce
	call MysAct	; vykreslím kurzor myši na nové pozici
	jmp Loop	; a návrat do smyčky

Ovladač myši typu 602 verze 3 v assembleru i8080

demonstrační úloha kreslení pomocí myši – projekt v PSPadu

Napsat komentář

Vaše emailová adresa nebude zveřejněna.