Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:kempstonmouse

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

lnxspectrum:kempstonmouse [2015/11/30 23:05]
lanex
lnxspectrum:kempstonmouse [2018/07/31 10:05]
Řádek 1: Řádek 1:
-=====Kempston Mouse===== 
-Kempston mouse je přídavné interface pro ZX Spectrum, umožňující připojit myš k ZX Spectrum. Existuje několik variant Kempston Mouse, většina z nich je vytvořena komunitou nadšenců ZX hardware. Existují varianty s podporou tří a více tlačítek, s podporou Scroll posuvníku a dokonce s možností připojení dvou myší najednou. LnxSpectrum emuluje klasický Kempston Mouse, tedy jedna myš + 2 tlačítka. Kemptston Mouse se v LnxSpectrum emulátoru aktivuje a deaktivuje pomocí prostředního tlačítka myši. 
  
-Emulovaný Kempston Mouse používá tyto porty: 
-^Port ^Popis ^ 
-|64479 |Pozice X | 
-|65503 |Pozice Y | 
-|64223 |Tlačítka myši | 
-===Pozice X (Port 64479), Pozice Y (Port 65503)=== 
-Na tomto portu není absolutní pozice 0-vlevo, 255-vpravo, ale poziční přírůstek. Pokud se myší posuneme například o 20 pixelů doprava, zvýší se sice hodnota na portu o 20, ale také může přetéct. To znamená, že pokud předchozí hodnota byla 250, přeteče a nová hodnota bude o 20 větší - tj. 14. ZX rutina s tím musí počítat. Naopak díky tomu nejsme omezeni na posuv jen v rozmezí 0-255. To platí samozřejmě i pro posuv vlevo, nahoru a dolů. 
-===Tlačítka (Port 64223)=== 
-Levé tlačítko je na bitu 0, pravé je na bitu 1. Hodnoty jsou negativní, tedy pokud není tlačítko stisknuté, je hodnota 1, pro stisknuté je hodnota 0. 
-====Čtení pozice myši na obrazovce pomocí assembleru==== 
-<code> 
-; LnxSpectrum ASM editor (www.ilnx.cz) 30.11.2015 
- 
- org 60000 
- 
-; Zinicializujeme myš na pozici na obrazovce, kterou chceme 
- ld a,128 
- ld (MouseX),a 
- ld a,96 
- ld (MouseY),a 
- call Mouse_init 
- 
-; Nasimulujeme si volání Mouse rutiny 50x za sekundu 
- ei 
-smy: halt 
- call Mouse_int ;aktualizace souřednice myši 
- 
-; Tady jen zobrazíme hodnoty X, Y a tlačítka myši ve VideoRam, aby byly vidět hodnoty 
- ld a,(MouseX) 
- ld (16384),a 
- ld a,(MouseY) 
- ld (16386),a 
- 
- ld bc,64223 
- in a,(c) 
- ld (16388),a 
- jr smy ;a opakujeme 50x za sec 
- 
-; Tady začíná inicializační rutina pro aktualizaci pozice myši 
-Mouse_init: ld bc,64479 
- in a,(c) 
- ld (KM_tx),a 
- ld b,255 
- in a,(c) 
- ld (KM_ty),a 
- ret 
- 
-; Tuto rutinu musíme volat 50x za sec (třeba pomocí přerušení) 
-Mouse_int: ld bc,64479 
- in d,(c) 
- 
- ld e,d 
- 
- ld a,(KM_tx) 
- 
- sub d 
- jr nc,KM_Right1 
- jp p,KM_Left1 
-KM_right: neg 
- 
- ld d,a 
- ld a,(MouseX) 
- add a,d 
- jr nc,KM_right2 
- ld a,255 
-KM_right2: ld (MouseX),a 
- 
- ld a,e 
- ld (KM_tx),a 
- jr KM_up_down 
- 
-KM_Right1: jp m,KM_right 
- 
-KM_Left1: ld d,a 
- ld a,(MouseX) 
- sub d 
- jr nc,KM_left2 
- xor a 
-KM_left2: ld (MouseX),a 
- 
- ld a,e 
- ld (KM_tx),a 
-  
-KM_up_down: ld b,255 
- in d,(c) 
- 
- ld e,d 
- 
- ld a,(KM_ty) 
- 
- sub d 
- jr nc,KM_Up1 
- jp p,KM_Down1 
-KM_Up0: neg 
- ld d,a 
- ld a,(MouseY) 
- sub d 
- jr nc,KM_Up2 
- xor a 
-KM_Up2: ld (MouseY),a 
- 
- ld a,e 
- ld (KM_ty),a 
- ret 
- 
-KM_Up1: jp m,KM_Up0 
- 
-KM_Down1: ld d,a 
- ld a,(MouseY) 
- add a,d 
- jr c,KM_Down2 
- cp 192 
- jr c,KM_Down3 
-KM_Down2: ld a,191 
-KM_Down3: ld (MouseY),a 
- 
- ld a,e 
- ld (KM_ty),a 
- ret 
- 
-KM_tx: defb 0 
-KM_ty: defb 0 
-MouseX: defb 128 ;Skutečná pozice X na obrazovce (0-255) 
-MouseY: defb 96 ;Skutečná pozice Y na obrazovce (0-191) 
-</code> 
lnxspectrum/kempstonmouse.txt · Poslední úprava: 2018/07/31 10:05 (upraveno mimo DokuWiki)