EnterMice
Az EnterMice PS/2 egér és joystick illesztőt Lengyelországból Maciej Gruszecki (pear) tervezte Enterprise 64/128-as számítógéphez. Pear sokat köszönhet a spanyol GFloreznek, ő ösztönözte az EnterMice tervezésére, valamint Németh Zoltánnak (Zozo), aki az első tesztelője volt a kártyának.
Az EnterMice nagyon szép, finom egérmozgásra képes, tesztelve lett hagyományos golyós, és optikai egérrel is. Teljesen kompatibilis a BoxSoft-féle egér interface-szel, működik az eredeti, módosítás nélküli Neos egérhez használt MOUSE.XR-rel is (ld. PaintBox)! Mindkét joystickhoz van teljes értékű (azaz autofire kompatibilis) botkormány átalakító a kártyán, valamint PS/2 egér port. Beépített mikrokontroller alakítja át az egeret MSX módra, azaz a végeredmény hasonló lesz az eredeti NEOS egérhez. A különbség az, hogy kihasználva a controll port lehetőségeit, másik bemenetre lett téve az egér, így egyszerre használható a joy és az egér, valamint nem őrülnek meg a külső joyt használó programok (Például az EPDOS) az egértől. Az egér használható lesz joy módban is, ekkor átveszi a Joy 1 helyét.
Az egér akár menet közben is csatlakoztatható, ezt még a PC se tudja PS/2 porton...
Általános leírás
Ne csatlakoztassuk az interface-t, amikor a számítógép be van kapcsolva!
Ha csatlakoztatás után bekapcsoláskor a számítógép nem megfelelően indul vagy szokatlanul viselkedik, azonnal ki kell kapcsolni! Ellenőrizzük, hogy az interface helyesen van-e csatlakoztatva és próbáljuk újra!
Bár az egér és a botkormányok csatlakoztathatók és kihúzhatok akkor is, amikor a számítógép be van kapcsolva, ez nem ajánlott. Biztonságosabb mindenféle csatlakoztatást kikapcsolt állapotban elvégezni. Miután a kártyát csatlakoztattuk, kapcsoljuk be a gépet! A kártya egy öntesztet hajt végre, ezt jelzi a piros és zöld led háromszori felvillanása (feltéve ha a kártyán lévő DIP-kapcsoló 3-as kapcsolója ON állásban van).
Az EnterMice kártya drivere a mouse.xr innen tölthető le.
A működési módokat a kártyán elhelyezett 5 db DIP kapcsolóval állíthatjuk:
DS1 DS2 Működési módok ON ON EnterMice egérmód OFF ON BoxSoft kompatibilis egérmód. Az egér bal és jobb gombja fordított állásban fog működni. OFF OFF EnterMice joystick mód (Az egérmozgás az 1-es joystick portra van irányítva, így ez a port nem használható). ON OFF nem használt
DS3 LED státusz OFF LED státusz kikapcsolva ON LED státusz bekapcsolva
DS4 Joystick emulációs mód beállítása OFF Normál érzékenység ON Magas érzékenység
DS5 Diagonal correction OFF Tiltás ON Engedélyezés
Az egérrel jelenleg használható felhasználói programok:
Az egérrel jelengeg használható játékprogramok:
Az egér driver létrehozza a mouse: nevű eszközt, melynek segítségével akár BASIC-ből is készíthetünk egérvezérelt programokat. A driver a következő rendszerváltozókat hozza létre:
180 | A videocsatorna száma, melyen az egérmutató látszik. Csatornanyitás előtt kell beállítani. Alapértelmezése a 101 csatorna (a BASIC alapértelmezés szerint ezen a csatornán nyitja meg a grafikus videolapokat.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
181 | A driver igény esetén megjeleníti a státussorban az egérmutató aktuális koordinátáit. Ez a rendszerváltozó határozza meg, a kiírás pozícióját, vagyis, hogy hányadik karaktertől kezdődjön a kiírás. Alapértelmezés: 30 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
182 | Ha a rendszerváltozó értéke 1, az egérmutató koordinátái látszanak a státussorban, ha 0, nem. Alapértelmezés: 0, vagyis a kijelzés kikapcsolt. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
183 | Az egérmutató színét adja meg. Alapértelmezése: 255, de nem színkódot kell megadni. Az egyes színüzemmódokban különböző értékek adják meg, hogy a színpaletta hányadik színe legyen az egérmutató színe:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
184 | Az egérmutató x koordinátájának alsó byte-ját adja. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
185 | Az egérmutató x koordinátájának felső byte-ját adja. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
186 | Az egérmutató y koordinátájának alsó byte-ját adja. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
187 | Az egérmutató y koordinátájának felső byte-ját adja. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
188 | Ha az egér elsődleges gombja lenyomott állapotban van, értéke: 1, egyébként: 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
189 | Az egérmutató mozgatásának eszközét választja ki (Csatornanyitás előtt kell beállítani.):
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
190 | Az egér további gombjainak állapotát adja vissza. A 7. bit a második gomb, a 4. bit az ötödig gomb, a 0-3 bit a görgő állapotát adja meg. Az adott bit 1 értéke jelzi a gomb lenyomott állapotát. |
A mouse: eszköz csatornájára írt vezérlő karakterekkel elérhető szolgáltatások:
Ez utóbbi funkcióval így kapjuk meg az egérmutató koordinátáit (feltételezve, hogy a mouse: eszközhöz az 1. csatorna van megnyitva):
PRINT £1:"P"
LOOK £1:XL
LOOK £1:XH
LOOK £1:YL
LOOK £1:YH
LET X=XL+256*XH
LET Y=YL+256*YH
Az egérmutató koordinátáit a rendszerváltozók használatával is lekérdezhetjük, ez azonban BASIC-ből nem üzembiztos - mert valamivel lassabb - megoldás:
ASK 184 XL
ASK 185 XH
ASK 186 YL
ASK 187 YH
LET X=(XL+256*XH)*2
LET Y=MAXY-((YL+256*YH)*2)
Ahol MAXY értéke:
Ugyanezzel az elvvel, programból is pozícionálhatjuk az egérmutatót:
LET X=INT(X/2)
LET XL=X-256*INT(X/256)
LET XH=INT(X/256)
LET Y=INT((MAX_Y-Y)/2)
LET YL=Y-256*INT(Y/256)
LET YH=INT(Y/256)
PRINT £1:"o";
SET 184,XL
SET 185,XH
SET 186,YL
SET 187,YH
PRINT £1:"O";
Példaprogram az egér használatára:
100 PROGRAM "ms_test.bas"
110 NUMERIC X,Y,LASTX,LASTY
120 LET X,Y,LASTX,LASTY=0
130 GRAPHICS HIRES 4
140 CALL MOUSE_SETUP
150 DO
160 CALL MOUSE_POS
170 LOOK £1:FIRE
180 IF FIRE THEN
190 PRINT £1:"o"; ! Pointer kikapcsolasa
200 PLOT LASTX,LASTY;X,Y
210 PRINT £1:"O"; ! Pointer bekapcsolasa
220 END IF
230 LET LASTX=X:LET LASTY=Y
240 LOOP UNTIL INKEY$=CHR$(27)
250 CLOSE £1 ! Az eger csatornajanak lezarasa befejezes elott
260 DEF MOUSE_SETUP
270 SET 180,101 ! Melyik videocsatornan legyen a pointer
280 SET 189,4 ! EnterMice mód
290 OPEN £1:"mouse:" ! Csatornanyitas az eger eszkoznek
300 SET 181,30 ! A koordinatak kijelzesenek pozicioja
310 SET 182,1 ! Koordinatak kijelzese a status sorban
320 SET 183,255 ! A pointer szine
330 END DEF
340 DEF MOUSE_POS ! A pointer koordinatainak lekerdezese
350 PRINT £1:"P"
360 LOOK £1:XL
370 LOOK £1:XH
380 LOOK £1:YL
390 LOOK £1:YH
400 LET X=XL+256*XH
410 LET Y=YL+256*YH
420 END DEF
A program segítségével az egér gombjának nyomva tartásával rajzolhatunk. Ha azonban "hevesebb" mozdulatokat teszünk, a BASIC lassúsága miatt a rajzolt ívek szögletessé válnak. Ezen gyorsabb programnyelv megválasztásával segíthetünk. Az egér használata Hisoft-Pascal-ból sem nehezebb:
PROGRAM mstest;
CONST CharY=20;
v=101;
VAR x,y,maxy,lastx,lasty,f:integer;
{$F os.hpu }
{$F grafcs.hpu }
PROCEDURE Print(ch,c:char);
BEGIN
ra:=ch;rb:=c;
Exos(7)
END;
PROCEDURE MouseSetup;
VAR charY:integer;
BEGIN
SetVar(180,v); SetVar(189,4);
Poke(£15AE,Chr(6));Poke(£15AF,'mouse:');
ra:=Chr(1);rde:=£15AE;
Exos(1); { Csatornanyitas }
SetVar(181,30); SetVar(182,1); SetVar(183,255);
Maxy:=Chary*36-2;
END;
PROCEDURE MousePos;
VAR xl,xh,yl,yh:integer;
BEGIN
xl:=Ask(184);xh:=Ask(185);yl:=Ask(186);yh:=Ask(187);
x:=(xl+256*xh)*2;
y:=MaxY-((yl+256*yh)*2)
END;
BEGIN
GrafOn(v,1,1,40,CharY);
Display(v,1,1,CharY);
MouseSetup;
REPEAT
MousePos;
f:=Ask(188);
IF f=1 THEN BEGIN
Print(Chr(1),'o');
Draw(v,LastX,Lasty,x,y);
Print(Chr(1),'O');
END;
LastX:=x;Lasty:=y
UNTIL inch=Chr(27);
Grafoff(1);Grafoff(v);User(£01EC)
END.
A Pascal-példában a rendszerváltozókkal kérdeztük le az egérmutató koordinátáit. Ha ezt egérkezelő csatornáján keresztül akarjuk megtenni, a program így módosul:
PROCEDURE MousePos;
VAR xl,xh,yl,yh:integer;
BEGIN
Print(Chr(1),'P');
xl:=Get(1);xh:=Get(1);
yl:=Get(1);yh:=Get(1);
x:=xl+256*xh;
y:=yl+256*yh
END;
Ebben az esetben feleslegessé válik a MaxY változó használata.
Az egér több gombját az alábbi programrészlettel figyelhetjük:
ASK 188 A
ASK 190 B
IF (A) THEN PRINT "Main button"
IF (B BAND 128) THEN PRINT "Secondary button"
IF (B BAND 16) THEN PRINT "Middle button"
IF (B BAND 32) THEN PRINT "Fourth button"
IF (B BAND 64) THEN PRINT "Fifth button"
LET B=(B BAND 15)
IF (B BAND 8) THEN LET B=B-16
PRINT "Wheel: ";B
Az IS-BASIC JOY függvénye csak egy tűzgombot figyel a botkormányokon. Az EnterMice azonban kettőt kezel, ennek figyelésére saját függvényt kell definiálni:
100 PROGRAM "JOYFIRE2.BAS"
110 ALLOCATE 40
120 CODE FIRE=HEX$("7C,F3,D3,B5,DB,B6,FB,A5,28,04,21,00,00,C9,21,01,00,C9")
130 DO
140 LET FIRE2=USR(FIRE,4)
150 IF FIRE2 THEN PRINT "FIRE I PRESSED"
160 LOOP
Enterpress 2016 . november |